
Я последовал заэтотруководство по моему unRAID-серверу в моем контейнере docker (siwatinc/ubuntu-playground) и успешно заставил его работать. Я установил cron на образ docker под названием UbuntuPlayground, и все из руководства работало успешно, пока задача cron не дала сбой. Я поискал проблему и думаю, что это из-за того, что в образе docker нет systemd (IDK, что это на самом деле) и он не запущен, поэтому cron нужно загрузить специальные вещи, чтобы он заработал. Поэтому я отошел от этого. Но если я нахожусь в bash моего контейнера docker с помощью этой команды:
docker exec -it UbuntuPlayground bash
Я могу запустить ./speedtest.sh из домашнего каталога, где находится скрипт оболочки, и он выполнит тест скорости в Интернете и загрузит его на Google Drive. Так что я обнаружил, что если я оставлю образ docker и из SSH на сервере unraid я запущу эту команду:
docker exec -it UbuntuPlayground /root/speedtest.sh
он успешно запустит код. Я даже могу видеть результаты теста скорости на моем Google Drive. Поэтому я попытался сделать cronjob на unraid, чтобы просто запустить эту команду. Поэтому я протестировал cron с помощью:
0 * * * * docker exec -it UbuntuPlayground /root/speedtest.sh
Я дал ему поработать несколько часов и проверил, но он не работал. Поэтому я попытался создать скрипт оболочки на хосте для запуска команды. Вот содержимое:
#!/bin/bash
docker exec -it UbuntuPlayground /root/speedtest.sh
Это просто называется speedtest.sh. Поэтому я добавил speedtest.sh в свой crontab:
0 * * * * /root/speedtest.sh
Затем я пошел спать и обнаружил эту проблему в моем /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
Итак, он падает с кодом выхода один. Я не понимаю, в чем проблема. Я подумал, что это какая-то проблема, которая просто выше моего понимания. Я погуглил код выхода один и ничего не нашел. Мне следует попытаться исправить проблему в контейнере docker при запуске cron или исправить проблемы в cron на моей хост-машине? Или кто-нибудь знает, как исправить и то, и другое?
Если вы все это прочитали, спасибо.
решение1
Я выяснил, почему это не работает в контейнере docker. cron не был запущен внутри. ИспользованиеэтотПри обмене стеками я обнаружил, что мне нужно выполнить следующую команду:
/etc/init.d/cron start
После этого я протестировал базовую задачу crontask, которая каждую минуту обращалась к файлу, и это сработало, а затем я добавил
*/30 * * * * /root/speedtest.sh
снова в свой crontab и я вижу последний запущенный speedtest. Так что это был просто случай, когда cron на самом деле не работал.