который находится в /home/srvlinux01/MySQLBackups/ как backup.sh со следующими разрешениями
-rwxr--r-- 1 root root 134 feb 27 12:48 backup.sh
Я устроил дружескую работу на sudo crontab -e запускать его каждый день, ночью
#Automatic MySQL backup30 3 * * * sh /home/srvlinux01/MySQLBackups/backup.sh
Но я получаю по электронной почте следующую ошибку:
sh: 0: Can't open /home/srvlinux01/MySQLBackups/backup.sh
Я пробовал разные настройки, но не могу понять, что не так. Я могу запустить скрипт вручную, и все идет отлично, так что я предполагаю, что с моей записью cronjob что-то не так, но не могу понять, что именно. Не могли бы вы, пожалуйста, помочь мне разобраться в этом? Спасибо!
В вашем случае попробуйте поместить это до ваша команда. Проверьте вики-страницу сообщества в этот вопрос для получения дополнительной информации о том, почему PATH переменная необходима. Вот выдержка; по сути, идея заключается в том, что cron не читает /etc/environment:
Распространенная "ошибка" заключается в том, что переменная окружения PATH отличается. Возможно, ваш cron-скрипт использует команду somecommand найденный в /opt/someApp/bin, который вы добавили в PATH в /etc/environment? cron не считывает этот файл, поэтому запуск somecommand из вашего скрипта произойдет сбой при запуске с помощью cron, но он будет работать при запуске в терминале. Чтобы обойти это, просто установите свой собственный PATH переменная в верхней части скрипта.
Я вижу одну ошибку в вашей конфигурации файла crontab. В приведенной ниже конфигурации вы пытаетесь вызвать backup.sh так же, как и в вашей командной строке с sh префикс, который может не работать в cron.
#Automatic MySQL backup30 3 * * * sh /home/srvlinux01/MySQLBackups/backup.sh
Решение:
при необходимости измените владельца, как указано в комментарии.
Сделайте его исполняемым.
chmod a+x <имя файла>
Обновите свой crontab, чтобы отразить это. (вызывая файл напрямую, оболочка используется в соответствии со строкой shebang внутри файла)
#Automatic MySQL backup30 3 * * * /home/srvlinux01/MySQLBackups/backup.sh
Вы пытались сменить владельца? Если вы запустите этот скрипт как обычный пользователь, chown user:user /home/srvlinux01/MySQLBackups/backup.sh (замените user:user на ваше имя пользователя и название вашей группы пользователей). При этом вы можете нормально запускать скрипт как обычный пользователь. Кроме того, если владелец root, сделайте то, что видел @Guru, запустите скрипт с помощью sudo.
Итак, теперь я сменил владельца скрипта на srvlinux01 (основной пользователь) и переместил cronjob в ** crontab -e ** вместо sudo crontab -e.
Однако по-прежнему безуспешно, как ни странно, он по-прежнему не может найти файл. Если я просто скопирую команду и вставлю ее в терминал, она будет работать нормально и создаст резервную копию!
Может быть, вам нужно указать своему cron ПУТЬ? Например: SHELL=/bin/sh PATH=/bin:/sbin:/usr/bin:/usr/sbin В вашем случае попробуйте поместить: SHELL=/bin/sh PATH=/bin:/sbin:/usr/bin:/usr/sbin:/home/srvlinux01/MySQLBackups/ перед вашим команда.
Почему ваша “резервная копия” не работает.у вас есть права на выполнение? Учитывая, что он доступен для чтения во всем мире, удаление разрешений x для группы и других бессмысленно, поскольку world может просто сделать резервную копию cat.sh | sh` и добиться того же. Помимо, очевидно, возможности просто прочитать имя пользователя и пароль…
Я обнаружил, что на сервере включено домашнее шифрование (вздох!), Поэтому я попытался переместить скрипт в отдельный каталог, но он по-прежнему не работает. Так что, похоже, проблема не в этом. Я пытался сменить шебанг, но все равно безуспешно.
Блестяще! Трюк с ТРОПИНКОЙ сделал свое дело! Не могли бы вы просто объяснить, что он делает, чтобы я мог использовать его в будущем? Может быть, сообщение - это ответ, чтобы я мог пометить его как правильный!