ubuntuusers.de

Shell Skript läuft nicht als cronjob

Status: Gelöst | Ubuntu-Version: Ubuntu 18.04 (Bionic Beaver)
Antworten |

feldmannu

Anmeldungsdatum:
23. März 2020

Beiträge: Zähle...

Hallo zusammen,

für meinen Asterisk habe ich ein Shellskript angelegt, das IP-Adressen aus einer MySql-Datenbank liest und diese dann freigibt oder sperrt:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
#!/bin/bash
HOSTNAME=*******
USERNAME=*******
PASSWORD=*******

IP_LIST=`mysql --user=$USERNAME --password=$PASSWORD --host=$HOSTNAME -Bse 'SELECT last_ip FROM db_teambox_projects.ip_list WHERE today < DATE(NOW());'`
for IP in $IP_LIST;
do
        ufw delete allow from $IP
done

mysql --user=$USERNAME --password=$PASSWORD --host=$HOSTNAME -Bse 'DELETE FROM db_teambox_projects.ip_list WHERE today < DATE(NOW())';

IP_LIST=`mysql --user=$USERNAME --password=$PASSWORD --host=$HOSTNAME -Bse 'SELECT last_ip FROM db_teambox_projects.ip_list WHERE today = DATE(NOW());'`
for IP in $IP_LIST;
do
        ufw allow from $IP
#echo $IP
done

Ich bin als Benutzer angemeldet und wechsele dann per sudo nach root. Wenn ich das Skript manuell laufen lasse funktioniert es tadellos. Lasse ich es aber als cronjob laufen (auch wieder mit root Rechten), kommt immer der Fehler ufw: command not found

Hat jemand eine Idee woran das liegt oder kennt jemand vielleicht einen besseren Weg?

Bearbeitet von rklm:

Codeblock. Bitte beachte Forum/Syntax und nutze die Vorschaufunktion!

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17625

Wohnort: Berlin

feldmannu schrieb:

Hallo zusammen,

für meinen Asterisk habe ich ein Shellskript angelegt, das IP-Adressen aus einer MySql-Datenbank liest und diese dann freigibt oder sperrt:

Bitte Codeblocks benutzen, dritter Button von rechts im Editfeld, sieht so <> aus.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
#!/bin/bash
HOSTNAME=*******
USERNAME=*******
PASSWORD=*******

IP_LIST=`mysql --user=$USERNAME --password=$PASSWORD --host=$HOSTNAME -Bse 'SELECT last_ip FROM db_teambox_projects.ip_list WHERE today < DATE(NOW());'`
for IP in $IP_LIST;
do
        ufw delete allow from $IP
done

mysql --user=$USERNAME --password=$PASSWORD --host=$HOSTNAME -Bse 'DELETE FROM db_teambox_projects.ip_list WHERE today < DATE(NOW())';

IP_LIST=`mysql --user=$USERNAME --password=$PASSWORD --host=$HOSTNAME -Bse 'SELECT last_ip FROM db_teambox_projects.ip_list WHERE today = DATE(NOW());'`
for IP in $IP_LIST;
do
        ufw allow from $IP
#echo $IP
done

Ich bin als Benutzer angemeldet und wechsele dann per sudo nach root. Wenn ich das Skript manuell laufen lasse funktioniert es tadellos. Lasse ich es aber als cronjob laufen (auch wieder mit root Rechten), kommt immer der Fehler ufw: command not found

Hat jemand eine Idee woran das liegt oder kennt jemand vielleicht einen besseren Weg?

Cron hat einen einen eigenen, eingeschränkten Pfad. Der kann aber in der crontab verlängert werden. Nähres im Wikiartikel cron (Suche: PATH).

Alternativ kann man den kompletten Pfad im Script setzen oder da einen entsprechenden Pfad setzen.

kB Team-Icon

Supporter, Wikiteam
Avatar von kB

Anmeldungsdatum:
4. Oktober 2007

Beiträge: 9775

Wohnort: Münster

feldmannu schrieb:

[…] woran das liegt

Skripte, die vom System ausgeführt werden, haben eine andere Umgebung als Skripte, die ein Benutzer (auch root) ausführt.

[…] besseren Weg

Programme, welche aus Systemskripten gestartet werden, gibt man nicht nur mit ihrem Namen, sondern mit dem vollständigen Pfad zur Programmdatei an.

feldmannu

(Themenstarter)

Anmeldungsdatum:
23. März 2020

Beiträge: 2

Vielen Dank, die PATH Variable hat es gebracht!

Antworten |