netzer2021
Goto Top

Cron job startet nicht

Hallo community,

ich möchte per crontab einen task starten um container zu stoppen und erneut zu starten. Dazu editiere ich meine crontab mittels:

sudo nano /etc/crontab -e

der relevante Inhalt ist:

#backup stop container
46 19 * * sun, tue, thu, sat local_master cd /home/local_master/ && ./doc_con_stop.sh
#back start container
56 19 * * sun, tue, thu, sat root /home/local_master/doc_con_start.sh

Aktuell sind bewusst zwei Varianten aufgezeigt. Leider funktioniert aktuell keine davon. Rufe ich das script normal als user local_master aus dem home verzeichnis auf funktioniert das Script und schreibt auch wie gewünscht Einträge in ein Log. local_master besitzt sudo Berechtigungen.

Das Script schaut in etwa so aus:
#!/bin/bash
#define log file
log=doc_con_backup_log.txt
# append date to log file
echo =================================== >> $log
date >> $log

# get all running docker container names
containers=$(sudo docker ps -a | awk '{if(NR>1) print $NF}')  
host=$(hostname)

# loop through all containers
for container in $containers
do
  if [ "$container" != "duplicati" ]; then  
    cmd=$(sudo docker start $container)
    echo Container: $cmd started >> $log
  fi
done

Wie muss ein richtiger Aufruf aus der crontab aussehen?

Dieses Beispiel funktioniert hingegen ohne Probleme
0 23 * * * root /usr/sbin/rtcwake -m mem -s 32400 $ #Sleep 

Nach Änderungen wurde auch
sudo service cron reload
ausgeführt.

Danke für hinweise.

Content-Key: 4326813067

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

Ausgedruckt am: 27.04.2024 um 00:04 Uhr

Mitglied: maretz
maretz 18.10.2022 um 20:33:45 Uhr
Goto Top
ich würde zuerst mal die leerzeichen zwischen den wochentagen wegmachen. Es ist für dich zwar ggf. schöner lesbar, es gibt aber div. configs die das als "trenner" sehen und du somit einfach mehr parameter angegeben hast als erlaubt sind...

Generell würde ich aber auch erwarten das du nen fehler in entweder /var/log/messages oder /var/log/syslog sehen wirst.
Mitglied: tk1234
tk1234 18.10.2022 um 20:36:12 Uhr
Goto Top
Moin,

Zitat von @netzer2021:
der relevante Inhalt ist:

#backup stop container
46 19 * * sun, tue, thu, sat local_master cd /home/local_master/ && ./doc_con_stop.sh

Zu viele Leerzeichen: nach einem Leerzeichen fängt (zumindest bei den Werten vor dem eigentlichen Befehl) eine neue "Spalte" an, du musst die Angabe der Wochentage ohne Leerzeichen dazwischen schreiben.

Gruß
Tobias
Mitglied: Lochkartenstanzer
Lochkartenstanzer 19.10.2022 aktualisiert um 08:45:44 Uhr
Goto Top
Moin,

"tue," ist kein User und "thu," ist kein Befehl. face-smile

Du hast Leerzeichen zwischen den Wochentagen, die dazu führen, daß cron den Befehl "thu," als user "tue" ausführen will. face-smile

Schau mal in die Logdateien. Da sollte es drinstehen.


lks

Edit: Ergänzungen
Mitglied: netzer2021
netzer2021 20.10.2022 aktualisiert um 22:52:45 Uhr
Goto Top
danke für die hinweise. Ich habe bisher folgendes angepasst

05 17 * * sun,tue,thu,sat root /home/local_master/doc_con_start.sh

das Script wird gestartet und alle Befehel auch ausgeführt, aber es gibt keinen log Eintrag. Könnte mir vorstellen, dass das log für anyone writable sein muss?

-rwxrwxr-x 1 local_master local_master 1113 Oct 20 17:05 doc_con_backup_log.txt
-rwxrwxr-x 1 local_master local_master  510 Oct 15 22:26 doc_con_start.sh
-rwxrwxr-x 1 local_master local_master  507 Oct 15 22:26 doc_con_stop.sh