Intereting Posts
Пусть окно X11 открыто в определенном размере и положении Как я могу навсегда изменить тип шрифта консоли TTY, чтобы он сохранялся после перезагрузки? bash добавить свойство, используя переменную с jq Загрузка ядра Maemo Как настроить параметры Unix для 360 Spatial Workstation (в частности, аудио-плагины vst и aax), чтобы заставить его работать как не-администратор? Что использует всю память в моей виртуальной машине? Это не кэш диска Как установить awesome wibox, видимый только для определенных тегов? Установка общей папки Windows при запуске без сохранения пароля в текстовом виде Атрибуты недоступны в udev копировать потребляемый вывод в stdout, когда stdout перенаправляется в файл Запустить приложение, основанное на Ubuntu на CentOS установить Firefox в версию ubuntu-server Как я могу запланировать запуск программы python из другой программы python? Как прекратить удаленно называемый «хвост -f», когда соединение закрыто? Отправить первую строку заголовка HTTP

Сценарий в cron не может найти команду

У меня есть скрипт, который выгружает базу данных и загружает файл SQL в Swift. Я столкнулся с проблемой, когда сценарий отлично работает в терминале, но не работает в cron.

Немного отладки, и я обнаружил, что команда /usr/local/bin/swift не найдена в скрипте.

Вот моя запись crontab:

 */2 * * * * . /etc/profile; bash /var/lib/postgresql/scripts/backup 

Вот что я пробовал:

  1. Использование полного пути для swift /usr/local/bin/swift
  2. Выполнение скрипта /etc/profile перед выполнением сценария bash.

Как я могу это решить?

Cron не работает с той же средой, что и пользователь. Если вы сделаете следующее, вы увидите, что я имею в виду:

введите env из приглашения на терминал и обратите внимание на результат.

Затем установите задание cron, подобное этому, и сравните его вывод с предыдущим:

 */5 * * * * env > ~/output.txt 

Вы обнаружите, что проблема, вероятно, crontab тем, что crontab не имеет той же PATH что и ваш пользователь. В качестве решения для этого вы можете (от своего пользователя postgres) выполнить echo $PATH а затем скопировать результаты этого в первую строку вашего crontab (что-то вроде этого)

 PATH=/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/jbutryn/.local/bin:/home/jbutryn/bin 

Или, если вы хотите быть более конкретным, вы можете просто добавить следующее:

 PATH=$PATH:/usr/local/bin 

Тем не менее, я обычно всегда ставил PATH моего пользователя в crontab, потому что я еще не слышал, что это не так, и вы, скорее всего, столкнетесь с этой проблемой, если этого не произойдет.

Вы сделали одну из самых распространенных ошибок cron . Если вы используете определенную среду, добавьте путь к $ PATH:

 # User specific environment and startup programs PATH=$PATH:$HOME/bin:/usr/sbin:/usr/bin:/script export PATH 

Также проверьте свой журнал cron (/ var / log / cron или / var / log / syslog). И проверьте разрешение пользователя на двоичные файлы.