Я создал задание cron в консоли в Ubuntu 12.04) с помощью crontab -e:

10 09 * * * /home/ram-pc/Desktop/bala/personal/dump.sh

Но это не работает. Когда я сохраняю, он установлен правильно, без ошибок, тогда, когда я просматриваю его с помощью crontab -l он показывает мой crontab, но он не работает вовремя.

Мой dump.sh содержит команды резервного копирования базы данных, и если я пытаюсь запустить отдельно, этот файл .sh работает правильно.

Кто-нибудь может сказать мне, в чем проблема?

Содержимое кода dump.sh :

cd
cd Desktop/bala/personal
mkdir $(date +%Y%m%d)
cd $(date +%Y%m%d)
mysqldump -u root -p*** --all-databases |gzip -9  >database-$(date +%Y%m%d).sql.gz

2 ответа2

1

Это ваша работа cron, и она выглядит хорошо:

10 09 * * * /home/ram-pc/Desktop/bala/personal/dump.sh

Срабатывать каждый день в 9:10. Но просмотр вашего сценария показывает проблему:

cd
cd Desktop/bala/personal
mkdir $(date +%Y%m%d)
cd $(date +%Y%m%d)
mysqldump -u root -p*** --all-databases |gzip -9 >database-$(date +%Y%m%d).sql.gz

Когда задание cron выполняется, оно не запускается от имени пользователя, поэтому пути к двоичным файлам загружаться не будут. Таким образом, сценарий не знает, где находится mysqldump . Таким образом , вы должны работать , which , чтобы выяснить , что полный путь выглядит так:

which mysqldump

И результат должен быть примерно таким; используя общий пример здесь:

/usr/local/bin/mysqldump

Кроме того, вы должны добавить обозначение скрипта в качестве первой строки файла, чтобы оболочка знала, в какой среде его следует запускать. Также cd и следующий cd Desktop/bala/personal могут быть упрощены до cd ~/Desktop/bala/personal . Таким образом, весь новый скрипт будет выглядеть примерно так:

#!/usr/bin/env bash
cd ~/Desktop/bala/personal
mkdir $(date +%Y%m%d)
cd $(date +%Y%m%d)
/usr/local/bin/mysqldump -u root -p*** --all-databases |gzip -9 >database-$(date +%Y%m%d).sql.gz

Попробуйте запустить его самостоятельно - из командной строки - чтобы увидеть, работает ли он. И если это произойдет, запустите его из cron снова.

0

Настройте задание cron, как показано ниже, чтобы вы улавливали ошибки при выполнении сценария, а также свое имя пользователя, например: charm_quark

  10 09 * * * charm_quark /home/ram-pc/Desktop/bala/personal/dump.sh >>  /home/ram-pc/Desktop/bala/personal/cron.log

Также проверьте свое разрешение и условия

Прежде чем использовать собственный скрипт, убедитесь, что он исполняемый, и протестируйте его с ограниченным набором переменных среды, установленных cron. Чтобы реплицировать среду, которая будет использоваться для запуска вышеуказанной записи cron, используйте:

env -i SHELL=/bin/sh PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin HOME=/home/dru LOGNAME=dru /usr/home/dru/bin/mycustomscript.sh

Ссылка: Глава 12.Конфигурация и настройка

Шаги по устранению неполадок

  1. Очистите файл dump.sh и замените его некоторыми эхо

    #!/usr/bin/env bash echo "this is a test" >> /home/ram-pc/Desktop/bala/personal/test.log

  2. Проверьте разрешение файла .sh и измените его.

    chmod 777 /home/ram-pc/Desktop/bala/personal/dump.sh

  3. Пожалуйста, обновите crontab до

    * * * * * charm_quark /home/ram-pc/Desktop/bala/personal/dump.sh >> /home/ram-pc/Desktop/bala/personal/cron.log

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .