Я делал задание крона для спасения моего мира 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
Кто-либо может помочь мне?
Вы не указали, как добавили свой cronjob. Это имеет большое значение: если вы использовали crontab -e
в своей учетной записи, сценарии запускаются с вашим пользователем (и, следовательно, запись в crontab имеет на одно поле меньше - пользователь, как известно, запускает ее). Если вы просто скопировали приведенный выше фрагмент в /etc/cron.d
, произойдет сбой, поскольку вы не указали пользователя (или, скорее, он не найдет пользователя с именем «bash»). Поэтому вы должны предпринять следующие шаги:
/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
. Даже если это работает, вы должны только подавить ненужный вывод - иначе вы никогда не узнаете, когда что-то пойдет не так. Поэтому лучше не указывать амперсанд, по крайней мере, чтобы Крон мог сообщать о любых возникающих ошибках.
Более того: Как только вывод перенаправлен (как в вашем случае /dev/null
), добавление еще одного перенаправления в конец не даст результатов, так как все уже прошло. Поэтому я должен изменить приведенный выше совет от «добавить ... в конец вашей записи в crontab», чтобы «заменить его в вашей записи в crontab»;)