Crontab mit Shell Probleme
Hallo zusammen.
Ich habe im Internet schon etwas recherchiert und bin noch nicht auf die richtige Lösung gestoßen.
Ich möchte mit einem Script das in regelmäßigen Abständen gestartet wird, Informationen sammelt und diese in eine Datei umleitet.
Der Inhalt des Scriptes.
Wenn ich das Script laufen lasse dann passt es, aber wenn ich es über Crontab in regelmäßigen Abständen laufen lassen will,
dann geht das nicht.
Hat mir jemand einen Hinweis wie ich das realisieren kann?
Vielen Dank!
Ich habe im Internet schon etwas recherchiert und bin noch nicht auf die richtige Lösung gestoßen.
Ich möchte mit einem Script das in regelmäßigen Abständen gestartet wird, Informationen sammelt und diese in eine Datei umleitet.
Der Inhalt des Scriptes.
#!/bin/bash
# every 15 minutes check how many nodes in use
wert=$(qmgr -c 'p n @default' | grep busy | wc -l) >> /tmp/nodes_busy.txt
echo $wert
echo "Datum: $(date +"%d"."%m"."%y") Uhrzeit: $(date +%H:%M:%S) Nodes in use: "$wert"" >> /tmp/nodes_busy.txt
Wenn ich das Script laufen lasse dann passt es, aber wenn ich es über Crontab in regelmäßigen Abständen laufen lassen will,
dann geht das nicht.
Hat mir jemand einen Hinweis wie ich das realisieren kann?
Vielen Dank!
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 322914
Url: https://administrator.de/contentid/322914
Ausgedruckt am: 25.11.2024 um 18:11 Uhr
9 Kommentare
Neuester Kommentar
in einer crontab sollte man aus Prinzip immer den vollen Pfad zum Binary angeben in deinem Fall also für qmgr
Den Pfad erfährst du z.B. mit which qmgr.
Gruß
Den Pfad erfährst du z.B. mit which qmgr.
Gruß
Das Skript sollte so passen. Der Interpreter Bash wird den Befehl qmgr auch finden ohne die Binary über den vollen Pfad anzusprechen.
Ich nehme mal folgendes an:
Ist das x-Bit gesetzt? chmod +x $skript
Dann kann man den Crontab Eintrag folgendermaßen gestalten:
Falls es nicht gesetzt ist, dann eher so:
Sowas wird nur funktionieren, wenn du eine Shell definiert hast:
x-Bit setzen und es so machen wie bei mir im ersten Beispiel sollte problemlos funktionieren. Ist auch die sauberste Lösung.
Einen Shebang hast du ja bereits im Skript.
Bitte auch auf den Eigentümer der Skriptdatei achten. Ist der Eigentümer root und die Gruppe root und du setzt als User root das x-Bit, kann jeder andere User per default nur lesen. Also funktioniert es dann nicht, wenn du es in eine "nicht root" Crontab einträgst.
Ich nehme mal folgendes an:
Ist das x-Bit gesetzt? chmod +x $skript
Dann kann man den Crontab Eintrag folgendermaßen gestalten:
*/15 * * * * /home/skripts/$skript
Falls es nicht gesetzt ist, dann eher so:
*/15 * * * * /bin/bash /home/skripts/$skript
Sowas wird nur funktionieren, wenn du eine Shell definiert hast:
SHELL=/bin/bash
*/15 * * * * bash /home/skripts/$skript
x-Bit setzen und es so machen wie bei mir im ersten Beispiel sollte problemlos funktionieren. Ist auch die sauberste Lösung.
Einen Shebang hast du ja bereits im Skript.
Bitte auch auf den Eigentümer der Skriptdatei achten. Ist der Eigentümer root und die Gruppe root und du setzt als User root das x-Bit, kann jeder andere User per default nur lesen. Also funktioniert es dann nicht, wenn du es in eine "nicht root" Crontab einträgst.
Schreib es so:
Und die Zeile steht auch wirklich in deiner eigenen Crontab? Denn auf dein Script hat nur der User Ausführrechte.
#!/bin/bash
# every 15 minutes check how many nodes in use
wert=$(qmgr -c 'p n @default' | grep busy | wc -l)
echo "Datum: $(date +"%d"."%m"."%y") Uhrzeit: $(date +%H:%M:%S) Nodes in use: '$wert'" >> /tmp/nodes_busy.txt
Dann wird's wohl irgendein Berechtigungsproblem oder was anderes geben das per Cron die Ausgabe von "qmgr" eine andere ist als die die du erwartest
Lass dir im Script einfach mal die RAW-Info in eine Textdatei loggen:
Lass dir im Script einfach mal die RAW-Info in eine Textdatei loggen:
/pfad zum binary/qmgr -c 'p n @default' >/pfad/mein.log
Die letztliche Lösung war den vollständigen Pfad zum Executable.
Sag ich ja.Bitte dann noch auf gelöst setzen.
Gruß