Bash-скрипт не выполняется из crontab [дубликат]

На этот вопрос уже есть ответ здесь:

У меня есть следующий сценарий bash:

#!/bin/bash
mysqldump -u ******** -p********  --all-databases | gzip > /home/srvlinux01/MySQLBackups/database_$(date +\%Y-\%m-\%d).sql.gz

, который находится в / home / srvlinux01 / MySQLBackups / в качестве резервной копии . sh со следующими разрешениями

-rwxr--r-- 1 root       root           134 feb 27 12:48 backup.sh

Я установил задание cron на sudo crontab -e , чтобы запускать его каждый день, ночью

#Automatic MySQL backup
30 3 * * * sh /home/srvlinux01/MySQLBackups/backup.sh

Но мне по электронной почте приходит следующая ошибка:

sh: 0: Can't open /home/srvlinux01/MySQLBackups/backup.sh

Я пробовал разные настройки, но не могу понять, что не так. Я могу запустить скрипт вручную, и все идет отлично, поэтому я предполагаю, что что-то не так с моей записью cronjob, но не могу понять, что именно. Не могли бы вы помочь мне разобраться? Спасибо!

20
задан 6 March 2013 в 12:56

4 ответа

Вы забыли точку "." до пути исполнения.

30 3 * * * sh ./home/srvlinux01/MySQLBackups/backup.sh             
              ^
0
ответ дан 6 March 2013 в 12:56

Я вижу одну ошибку в вашей конфигурации файла crontab. В приведенной ниже конфигурации вы пытаетесь вызвать backup.sh так же, как в командной строке с префиксом sh, который может не работать в cron.

#Automatic MySQL backup
30 3 * * * sh /home/srvlinux01/MySQLBackups/backup.sh
Решение:
  1. при необходимости смените владельца, как указано в комментарии.
  2. Сделайте его исполняемым.
    chmod a+x <filename>
  3. Обновите свой crontab, чтобы отразить это. (вызывая файл напрямую, оболочка используется в соответствии со строкой shebang внутри файла)

    #Automatic MySQL backup
    30 3 * * * /home/srvlinux01/MySQLBackups/backup.sh
    

Надеюсь, это поможет.

0
ответ дан 6 March 2013 в 12:56

Вам нужно дать своему крону PATH. Например:

SHELL=/bin/sh PATH=/bin:/sbin:/usr/bin:/usr/sbin 

В вашем случае попробуйте поставить перед вашей командой. Обратитесь к вики сообщества по этому вопросу для получения дополнительной информации о том, зачем нужна переменная PATH. Вот выдержка; По сути, идея состоит в том, что cron не читает /etc/environment:

Распространенной «ошибкой» является то, что переменная окружения PATH отличается. Может быть, ваш скрипт cron использует команду somecommand из /opt/someApp/bin, которую вы добавили в PATH в /etc/environment? cron не читает этот файл, поэтому запуск somecommand из вашего скрипта завершится неудачно при запуске с cron, но будет работать при запуске в терминале. Чтобы обойти это, просто установите собственную переменную PATH в верхней части скрипта.

0
ответ дан 6 March 2013 в 12:56
chmod +x /home/srvlinux01/MySQLBackups/backup.sh             

попробуйте запустить скрипт с полным путем в командной строке:

/home/srvlinux01/MySQLBackups/backup.sh

, если он не запущен - что-то не так (ошибка пути)

Убедитесь, что это ваш crontab

crontab -e 

no sudo:

sudo crontab -e

является корневым crontab - и root не может найти ваш скрипт;)

удалите «sh» в crontab просто напишите:

30 3 * * * /home/srvlinux01/MySQLBackups/backup.sh
0
ответ дан 6 March 2013 в 12:56

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

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