Cron задание не выполняется
Я делал работу cron, чтобы спасать мир Minecraft от моего барана каждые 5 минут. Я проверил сценарий, и он, кажется, работает.
Вот как выглядит скрипт:
#!/bin/sh
VOLATILE="/home/jonathan/Games/Minecraft/Server/world/"
PERMANENT="/home/jonathan/Games/Minecraft/Server/world_storage/"
rsync -r -t -v "$VOLATILE" "$PERMANENT"
Итак, я пошел, чтобы добавить задание cron для запуска скрипта каждые 5 минут, и, похоже, он не запускается.
Это скрипт, который я использовал:
*/5 * * * * bash /home/jonathan/Games/Minecraft/Server/Backup.sh
Кто-нибудь может мне помочь?
1 ответ
Вы не указали, как вы добавили свой cronjob. Это имеет большое значение: если вы использовали crontab -e в вашей учетной записи сценарии запускаются вместе с вашим пользователем (и, следовательно, запись в crontab имеет на одно поле меньше - пользователь, как известно, запускает ее). Если вы просто скопировали приведенный выше фрагмент в /etc/cron.d, он потерпит неудачу, так как вы не указали пользователя (или, скорее, поскольку он не найдет пользователя с именем "bash"). Поэтому вы должны предпринять следующие шаги:
- обновите свой вопрос информацией о том, как вы добавили работу cron
- проверьте системные журналы (
/var/log/syslog; они могут указывать на возможные ошибки) - добавить отладочный вывод к вашему
Backup.shскрипт, чтобы увидеть, запущен ли он
Третий пункт может быть достигнут несколькими способами:
- добавить
>>/tmp/testlog.logдо конца вашей записи в crontab (для перенаправления вывода в файл, который вы можете исследовать; кроме того,2>&1будет включать вывод из консоли ошибок) - добавить несколько строк в сам скрипт, например, например
echo "Backup.sh started">/tmp/testlog.log
Более того: поскольку вы собираетесь запускать скрипт, используя bash, вы не должны указывать это использовать /bin/sh (что бы использовать его dash по умолчанию установка Ubuntu), а точнее /bin/bash, Затем сделайте его исполняемым, и вы даже можете опустить "bash" из вашей записи в crontab.
Обновить:
Согласно вашему комментарию на мой ответ, вы использовали crontab -e чтобы создать работу, и в соответствии с вашими системными журналами она выполняется, но определение скорее
*/5 * * * * bash /home/jonathan/Games/Minecraft/Server/Backup.sh &>/dev/null
Это перенаправляет весь вывод в самое большое хранилище в вашей системе, в "черную дыру": /dev/null ест все (но никогда ничего не возвращает). Перенаправление STDOUT и STDERR таким образом отнимает у вас любые сообщения об ошибках - так что вы никогда не узнаете, что они вообще произошли, не говоря уже о деталях. Для тестирования вы должны опустить &>/dev/null часть полностью. Даже если это работает, вы должны только подавить ненужный вывод - иначе вы никогда не узнаете, когда что-то пойдет не так. Поэтому лучше не указывать амперсанд, по крайней мере, чтобы Cron мог сообщать о любых возникающих ошибках.
Более того: после перенаправления вывода (как в вашем случае /dev/null), добавление еще одного редиректа в конец не даст результатов, так как все уже прошло. Поэтому я должен изменить приведенный выше совет от "добавить... в конец вашей записи в crontab", чтобы "заменить его в вашей записи в crontab";)