
ich folgteDasAnleitung auf meinem unRAID-Server in meinem Docker-Container (siwatinc/ubuntu-playground) und habe es erfolgreich zum Laufen gebracht. Ich habe Cron auf einem Docker-Image namens UbuntuPlayground installiert und alles aus der Anleitung hat erfolgreich funktioniert, bis die Cron-Aufgabe fehlschlug. Ich habe das Problem nachgeschlagen und glaube, es liegt daran, dass das Docker-Image kein systemd hat (keine Ahnung, was das eigentlich ist), also muss Cron spezielle Sachen herunterladen, damit es funktioniert. Also habe ich damit weitergemacht. Aber wenn ich mich in der Bash meines Docker-Containers mit diesem Befehl befinde:
docker exec -it UbuntuPlayground bash
Ich kann ./speedtest.sh aus dem Home-Verzeichnis ausführen, in dem sich das Shell-Skript befindet. Es führt dann den Geschwindigkeitstest im Internet durch und lädt ihn auf Google Drive hoch. Ich habe auch herausgefunden, dass ich diesen Befehl ausführe, wenn ich das Docker-Image verlasse und über SSH auf dem Unraid-Server laufe:
docker exec -it UbuntuPlayground /root/speedtest.sh
es wird den Code erfolgreich ausführen. Ich kann die Speedtest-Ergebnisse sogar auf meinem Google Drive sehen. Also habe ich versucht, einen Cronjob auf Unraid zu erstellen, um einfach diesen Befehl auszuführen. Also habe ich Cron mit folgendem getestet:
0 * * * * docker exec -it UbuntuPlayground /root/speedtest.sh
Ich habe es ein paar Stunden laufen lassen und überprüft, aber es funktionierte nicht. Also habe ich versucht, ein Shell-Skript auf dem Host zu erstellen, um den Befehl auszuführen. Hier sind die Inhalte:
#!/bin/bash
docker exec -it UbuntuPlayground /root/speedtest.sh
Das heißt einfach speedtest.sh. Also habe ich speedtest.sh zu meiner Crontab hinzugefügt:
0 * * * * /root/speedtest.sh
Dann ging ich schlafen und bekam dieses Problem in meinem /var/log/syslog
Nov 3 21:00:01 TrevNas2 sudo: root : TTY=unknown ; PWD=/root ; USER=root ; COMMAND=/usr/bin/docker exec -it UbuntuPlayground /root/speedtest.sh
Nov 3 21:00:01 TrevNas2 crond[1861]: exit status 1 from user root /root/speedtest.sh
Nov 3 21:00:06 TrevNas2 sSMTP[26673]: Creating SSL connection to host
Nov 3 21:00:06 TrevNas2 sSMTP[26673]: SSL connection using TLS_AES_256_GCM_SHA384
Nov 3 21:00:07 TrevNas2 sSMTP[26673]: Authorization failed (534 5.7.9 https://support.google.com/mail/?p=InvalidSecondFactor j79sm5194000ywj.11 - gsmtp)
Nov 3 21:00:07 TrevNas2 crond[1861]: exit status 1 from user root /usr/local/sbin/mover &> /dev/null
Nov 3 22:00:01 TrevNas2 sudo: root : TTY=unknown ; PWD=/root ; USER=root ; COMMAND=/usr/bin/docker exec -it UbuntuPlayground /root/speedtest.sh
Nov 3 22:00:01 TrevNas2 crond[1861]: exit status 1 from user root /root/speedtest.sh
Nov 3 22:00:06 TrevNas2 sSMTP[21643]: Creating SSL connection to host
Nov 3 22:00:06 TrevNas2 sSMTP[21643]: SSL connection using TLS_AES_256_GCM_SHA384
Nov 3 22:00:07 TrevNas2 sSMTP[21643]: Authorization failed (534 5.7.9 https://support.google.com/mail/?p=InvalidSecondFactor x64sm4861319ywb.55 - gsmtp)
Nov 3 22:00:12 TrevNas2 crond[1861]: exit status 1 from user root /usr/local/sbin/mover &> /dev/null
Es schlägt also mit Exitcode 1 fehl. Ich verstehe nicht, was das Problem damit ist. Ich dachte, es ist ein Problem, das ich einfach nicht begreifen kann. Ich habe nach Exitcode 1 gegoogelt und konnte nichts finden. Soll ich versuchen, das Problem im Docker-Container in laufendem Cron zu beheben oder die Probleme in Cron auf meinem Host-Rechner zu beheben? Oder weiß jemand, wie man eines von beiden behebt?
Wenn Sie das alles gelesen haben, danke.
Antwort1
Ich habe herausgefunden, warum es im Docker-Container nicht funktioniert. Cron lief darin nicht.DasStack Exchange habe ich festgestellt, dass ich den folgenden Befehl ausführen muss:
/etc/init.d/cron start
Danach habe ich einen einfachen Crontask getestet, der jede Minute eine Datei berührte, was funktionierte, und dann habe ich hinzugefügt
*/30 * * * * /root/speedtest.sh
wieder zu meiner Crontab und ich kann den letzten ausgeführten Geschwindigkeitstest sehen. Es lag also einfach daran, dass Cron nicht wirklich ausgeführt wurde.