Задание cron выполняется в cron.daily, но не в файле crontab. Пробовал уже предложенные методы отладки. [дубликат]

Я уже прошу прощения за то, что задал еще один вопрос cron. Я прочитал десятки справочных статей в Интернете, но все еще не нашел решения. Так что из любопытства мне нужно найти решение.


Я просто хочу запускать команду каждый день в 4 утра. Вот что я сделал до сих пор:

  1. # crontab -e . Добавьте эту строку: 00 04 * * * root ruby ​​/home/script.rb list >> /tmp/output.log. (script.rb просто содержит "устанавливает 'hello'")
  2. script.rb принадлежит пользователю root, и для всех пользователей установлены права на выполнение.
  3. Я запустил rvm cron setup , чтобы установить некоторые переменные среды в файл crontab для задания cron, чтобы найти мои исполняемые файлы ruby.
  4. В файл crontab добавлены дополнительные переменные среды, такие как мой PATH , SHELL = / bin / bash и BASH_ENV = / root / .bashrc .

После 4 часов ночи я проверяю журналы cron, и действительно, скрипт был выполнен. 14 декабря 4:00:01 admin CRON [25374]: (root) CMD (root ruby ​​/home/script.rb list >> /tmp/output.log), но когда я проверьте / tmp , файл output.log не существует.Когда я запускаю команду отдельно, появляется /tmp/output.log и содержит привет, поэтому команда работает.

  1. Итак, я возвращаюсь к своему файлу crontab и меняю ruby ​​ на /usr/local/rvm/rubies/ruby-2.2.1/bin/ruby (вывод ] which ruby ​​), чтобы сделать все абсолютными путями. Он запускается, но по-прежнему нет /tmp/output.log.
  2. Я заменяю строку в crontab на: 00 04 * * * root / home / run_script вместо этого, где run_script содержит:
    #! / Bin / bash {{1 }} / usr / local / rvm / rubies / ruby-2.2.1 / bin / ruby ​​/home/script.rb list >> /tmp/output.log просто попробуйте использовать файл сценария вместо однострочной команды в crontab. Он запускается, но по-прежнему нет /tmp/output.log.
  3. Я захожу в файл run_script , избавляюсь от всего рубинового и иду простым путем:
    #! / Bin / bash echo "hello" >> / tmp /output.log Он запускается, но по-прежнему нет /tmp/output.log.

Я также должен отметить, что я установил MAILTO = root в моем файле crontab, но почта не доставлялась в root.

  1. Теперь я провел еще один эксперимент, когда я взял run_script и поместил его в /etc/cron.daily , он отлично работает. Нет проблем.

Другие примечания: Cron работает: ps -ef | grep cron | grep -v grep выводит, что cron запущен. В файле crontab после моей команды есть пустая строка.

cron кажется довольно сложным для отладки. Системный журнал просто сообщает мне, что задание cron было выполнено, но больше ничего не сообщает. Я не получаю почту, поэтому это не может мне помочь. К счастью, /etc/cron.daily пока работает, но я хочу знать, почему не работает crontab.

Есть предложения, идеи, намеки на отладку?

-4
задан 15 December 2015 в 00:28
1 ответ

Это неправильный формат для файла crontab пользователя. Вам необходимо удалить спецификацию пользователя root '. У вас будет это в / etc / crontab ', но не в crontab для каждого пользователя.

1
ответ дан 5 December 2019 в 22:11

Теги

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