В моем файле crontab (sudo crontab -e
) у меня есть следующие команды:
*/1 * * * * wget -q -O /dev/null http://help.mysite.com/inc/mail/hesk_pop3.php
0 7 * * * bash -c "/home/backup/backupscript.sh"
Первая строка выполняется и работает правильно, но вторая строка по какой-то причине не работает. Однако, если я запускаю скрипт через терминал (./backupscript.sh
), он работает правильно.
Файл backupscript.sh принадлежит root: root и имеет 755 разрешений.
В этом файле содержится следующий фрагмент кода:
#!/bin/bash
/usr/bin/mysqldump -u root -wordpresspassword wordpressusername | /bin/gzip > /home/backup/mysql/wordpress_`date +%m-%d-%Y_%T`.sql.gz
/usr/bin/mysqldump -u root -heskpassword heskusername | /bin/gzip > /home/backup/mysql/hesk_`date +%m-%d-%Y_%T`.sql.gz
/bin/tar cvzf /home/backup/wordpress/wordpress_`date +%m-%d-%Y_%T`.tar.gz /var/www/wordpress/
/bin/tar cvzf /home/backup/hesk/hesk_`date +%m-%d-%Y_%T`.tar.gz /var/www/hesk/
/usr/bin/s3cmd sync -r -P /home/backup/ s3://backups.mysite/
find /home/backup/ -mtime +7 -type f -exec rm {} \;
Сценарий в основном создает резервные копии наших баз данных MySQL и сжимает их, создает резервные копии наших сайтов Apache и сжимает их, копирует эти файлы в Amazon S3 и затем выполняет очистку на сервере.
Что мне здесь не хватает? Я пробовал несколько вещей, таких как переключение с bash на shell, но пока ничего не получалось.
Одним из способов решения этой проблемы является использование сценария оболочки:
for (( ; ;))
do
sleep 86400
wget -q -O http://help.mysite.com/inc/mail/hesk_pop3.php
/bin/sh /home/backup/backupscript.sh
done
В приведенном выше сценарии я использовал sleep 86400
(это эквивалентно одному дню в секундах) Вы можете настроить свой интервал соответственно.
Если вы хотите запустить на каком-нибудь сервере / десктопе протоколирование с использованием ssh, запустите / запустите этот скрипт как фоновый процесс.
Общие советы по отладке crontab:
{ command1; command2; } &>/tmp/joboutput
MAILTO=user@example.com
в вашем crontab. man 5 crontab
: -)
Вся командная часть строка, до новой строки или символа%, будет выполнена / bin / sh или оболочкой, указанной в переменной SHELL файла crontab. Знаки процента (%) в команде, если они не экранированы обратной косой чертой (), будут изменены на символы новой строки, и все данные после первого% будут отправлены команде в качестве стандартного ввода. Невозможно разделить одну командную строку на несколько строк, как, например, завершающий символ оболочки "\". Blockquote>