mschaedler1982
Goto Top

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.
#!/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!

Content-ID: 322914

Url: https://administrator.de/contentid/322914

Ausgedruckt am: 05.11.2024 um 23:11 Uhr

131381
Lösung 131381 05.12.2016 um 09:36:58 Uhr
Goto Top
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ß
Kedakai
Lösung Kedakai 05.12.2016 aktualisiert um 11:02:07 Uhr
Goto Top
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:
*/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.
mschaedler1982
mschaedler1982 05.12.2016 um 13:05:54 Uhr
Goto Top
Danke für die Ansätze.

Das x-Bit ist bereits gesetzt und im Crontab sind bereits andere Jobs definiert die auch laufen, aber in meinem Beispiel ist eine Variable enthalten die definiert werden muss und in meiner Datei schreibt er mir Pauschalt den Wert 0 rein, obwohl einige Knoten in Verwendung sind.

-rwx------ 1 root root 677 Dec  5 09:27 nodes_in_use.sh
# every 15 minutes check how many nodes in use
* 7-18 * * * /shell/nodes_in_use.sh
131381
131381 05.12.2016 aktualisiert um 13:34:04 Uhr
Goto Top
Schreib es so:
#!/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  
Und die Zeile steht auch wirklich in deiner eigenen Crontab? Denn auf dein Script hat nur der User Ausführrechte.
mschaedler1982
mschaedler1982 05.12.2016 um 13:32:21 Uhr
Goto Top
Nein

Das steht in meinem Crontab

# every 15 minutes check how many nodes in use 
* 7-18 * * * /shell/nodes_in_use.sh

Meine anderen Scripte haben dieselben Rechte.

-rwx------ 1 root root 794 Nov 25 09:43 disk_in_use.sh
-rwx------ 1 root root 656 Jul 25 10:20 disk_utilization.sh
-rwx------ 1 root root 544 Sep 16 14:10 free_mem_info.sh
-rwx------ 1 root root 584 Oct 18 14:00 ibqueryerror_check.sh
-rwx------ 1 root root 677 Dec  5 09:27 nodes_in_use.sh
-rwx------ 1 root root 992 Oct 18 14:06 perfquery_check.sh
mschaedler1982
mschaedler1982 05.12.2016 um 14:31:34 Uhr
Goto Top
Das Script habe ich entsprechend angepasst, nun erscheint die Ausgabe so.

Datum: 05.12.16 Uhrzeit: 14:30:01 Nodes in use: '0'  

Obwohl mehr Knoten den Status busy haben.
mschaedler1982
mschaedler1982 05.12.2016 um 15:02:38 Uhr
Goto Top
Die letztliche Lösung war den vollständigen Pfad zum Executable.

Danke für die Hilfe.
131381
131381 05.12.2016 aktualisiert um 15:11:28 Uhr
Goto Top
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:
/pfad zum binary/qmgr -c 'p n @default' >/pfad/mein.log  
131381
131381 05.12.2016 aktualisiert um 15:12:18 Uhr
Goto Top
Die letztliche Lösung war den vollständigen Pfad zum Executable.
Sag ich ja.
Bitte dann noch auf gelöst setzen.

Gruß