
У меня есть скрипт, который отлично работает, если я вызываю его из командной строки, используя Bash. Но когда cron пытается его запустить, он выдает ошибку "mysql: command not found".
Я думаю, это потому, что cron не использует bash в качестве оболочки, но я не могу понять, как заставить cron использовать bash.
Я попробовал добавить это в начало скрипта:
#!/bin/bash
Но радости нет. Как заставить cron использовать bash в качестве оболочки? Я новичок в bash и cron, так что могу упустить что-то простое. Я прочитал несколько сообщений serverfault (хотел бы дать ссылки на них все, но не могу, новый пользователь) и попытался понять и применить информацию, как мог, плюс много гуглил, но застрял.
решение1
Pulegium прав, проблема не в типе оболочки, а в PATH. Когда cron запускается, у него очень ограниченный путь поиска, вместо того, чтобы вводить mysql
команду, вы должны вводить /path/to/mysql
фактический путь к исполняемому файлу. Обычно что-то вроде /usr/local/bin/mysql
. Вам придется выполнить поиск, чтобы найти точный путь. Кроме того, если проблема в оболочке, в вашем файле cron вы можете запустить bash, а затем запустить свой скрипт: /bin/bash /path/to/script.sh
, это гарантирует, что bash обрабатывает файл.
решение2
лучше всего использовать абсолютные пути к командам в скриптах cron, чтобы не полагаться на какие-либо настройки PATH, которые вы могли изменить.