Cron не запускается - PullRequest
       22

Cron не запускается

5 голосов
/ 10 сентября 2011

У меня есть задание cron, которое я хочу выполнять каждые 5 минут:

0,5,10,15,20,25,30,35,40,45,50,55 * * * * /scr_temp/scheduleSpider.sh

В /var/spool/cron/crontabs/root

Хрон должен выполнить скрипт оболочки:

#!/bin/sh
if [ ! -f "sync.txt" ]; then
    touch "sync.txt"
    chmod 777 /scr_temp
    curl someLink
fi

Это отлично работает из командной строки, но не из cron. Однако сам cron запускается, но скрипт не запускается.

Я читал о проблеме пути, но я действительно не понимаю ее Я установил cron, который записывает некоторые данные env в файл. Это вывод:

HOME=/root
LOGNAME=root
PATH=/usr/bin:/bin
SHELL=/bin/sh

Если я выполню команду env в командной строке, я получу следующий вывод для PATH

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

Какой путь мне нужно указать в моем сценарии оболочки?

Ответы [ 7 ]

4 голосов
/ 11 сентября 2011

Ваш $PATH в порядке; оставить это в покое. В Ubuntu все команды, которые вы вызываете (touch, chmod, curl), находятся в /bin и / или /usr/bin.

Как вы настроили работу cron? Вы запускали crontab some-file как root?

Кажется, что /etc/crontab - это обычный механизм запуска команд cron от имени root. В моей системе Ubuntu sudo crontab -l говорит no crontab for root. Запуск crontab от имени пользователя root, как и для любой учетной записи без полномочий root, должен быть в порядке, но вы можете вместо этого использовать /etc/crontab. Обратите внимание, что он использует другой синтаксис, чем обычный crontab, как объяснено в комментариях вверху /etc/crontab:

$ head -5 /etc/crontab
# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.

Выполнить sudo crontab -l. Это показывает вашу команду?

Временно измените ваш сценарий, чтобы он всегда давал видимый вывод. Например, добавьте следующее сразу после #!/bin/sh:

echo "Running scheduleSpider.sh at \`date\`" >> /tmp/scheduleSpider.sh.log

и посмотрите, что будет в /tmp/scheduleSpider.sh.log через несколько минут. (Вы можете настроить запуск команды каждую минуту, чтобы вам не приходилось долго ждать результатов.) Если это сработает (должно быть), вы можете добавить больше команд echo в ваш скрипт, чтобы детально увидеть, что он делает. .

Похоже, ваш скрипт предназначен для запуска только один раз; он создает файл sync.txt, чтобы предотвратить его повторный запуск. Это может быть корнем (гм) вашей проблемы. Какое у тебя намерение? Вы хотели удалить sync.txt после запуска команды и просто забыли это сделать?

Домашний каталог

root в Ubuntu - /root. При первом запуске вашего скрипта он должен создать /root/sync.txt. Этот файл существует? Если да, то сколько лет?

Обратите внимание, что curl someLink (при условии, что someLink является действительным URL-адресом) будет просто выводить содержимое из указанной ссылки в стандартный вывод. Это было ваше намерение (оно будет отображаться по электронной почте на root? Или вы просто не показывали нам всю команду?

2 голосов
/ 10 сентября 2011

Первое: вы можете заменить первое поле на */5 (см. Man 5 crontab) Второе: попросите cron отправить вывод на ваш адрес электронной почты, введя MAILTO=your@email.address в вашем crontab. Если скрипт имеет какой-либо вывод, он будет отправлен по почте. Вместо этого у вас может быть локальный почтовый ящик, в котором вы можете найти вывод cron (обычно $ MAIL).

1 голос
/ 10 сентября 2011

Я предлагаю:

  • проверить, что /scr_temp/scheduleSpider.sh имеет исполняемый бит
  • правильно установить PATH в вашем скрипте или использовать абсолютный путь к команде (/bin/touch вместоtouch)
  • указать абсолютный путь к файлу sync.txt (или рассчитать его относительно скрипта)
1 голос
/ 10 сентября 2011

Лучший синтаксис для вас CRON

*/5 * * * * /scr_temp/scheduleSpider.sh

Кроме того, проверьте права доступа к файлу scheduleSpider.sh. Cron работает под другим пользователем, нежели тот, которого вы, скорее всего, выполняете в интерактивном режиме, поэтому возможно, что у cron нет полномочий. Попробуйте chmod 777 сейчас, просто чтобы проверить.

0 голосов
/ 27 декабря 2013

Вы должны добавить / bin / sh перед абсолютным путем вашего скрипта.

*/5 * * * * /bin/sh /scr_temp/scheduleSpider.sh
0 голосов
/ 10 сентября 2011

Установите рабочий каталог в скрипте cron, он, вероятно, не выполняет то, что, по вашему мнению, должно быть.

0 голосов
/ 10 сентября 2011

Вы добавили команду через crontab -e или просто отредактировали файл crontab?Вы должны использовать crontab -e для корректного обновления.

...