Задание крона, не выполняющееся

Я делал задание крона для спасения моего мира 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"

Таким образом я пошел для добавления задания крона для запущения скрипта каждые 5 минут, и это, кажется, не выполняет его.

Это - сценарий, который я использовал:

*/5 * * * * bash /home/jonathan/Games/Minecraft/Server/Backup.sh

Кто-либо может помочь мне?

1
задан 16 July 2012 в 16:07

1 ответ

Вы не указали, как добавили свой cronjob. Это имеет большое значение: если вы использовали crontab -e в своей учетной записи, сценарии запускаются с вашим пользователем (и, следовательно, запись в crontab имеет на одно поле меньше - пользователь, как известно, запускает ее). Если вы просто скопировали приведенный выше фрагмент в /etc/cron.d, произойдет сбой, поскольку вы не указали пользователя (или, скорее, он не найдет пользователя с именем «bash»). Поэтому вы должны предпринять следующие шаги:

  1. обновить ваш вопрос информацией о том, как вы добавили задание cron
  2. проверить системные журналы (/var/log/syslog; они могут указывать на возможные ошибки) )
  3. добавьте некоторые выходные данные отладки в ваш скрипт 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. Даже если это работает, вы должны только подавить ненужный вывод - иначе вы никогда не узнаете, когда что-то пойдет не так. Поэтому лучше не указывать амперсанд, по крайней мере, чтобы Крон мог сообщать о любых возникающих ошибках.

Более того: Как только вывод перенаправлен (как в вашем случае /dev/null), добавление еще одного перенаправления в конец не даст результатов, так как все уже прошло. Поэтому я должен изменить приведенный выше совет от «добавить ... в конец вашей записи в crontab», чтобы «заменить его в вашей записи в crontab»;)

0
ответ дан 16 July 2012 в 16:07

Другие вопросы по тегам:

Похожие вопросы: