LinuxForum.Fans
Тема

Подскажите почему не работает crontab

Автор: valet 16 сообщений 10029 просмотров
#160469

Добавляю в crontab -e
строку
[console]30 * * * * root /var/www/pp/pp_cron[/console]

Если запускать /var/www/pp/pp_cron - скрипт прекрасно отрабатывает.

Вопрос: почему он не работает через cron? Что я делаю не так?

Заранее спасибо.

#160470

valet, перевод строки в конце файла есть?

#160471

Lupo Alberto, не было, добавил, подождал больше минуты, проверил через ls -la дату файла, который должен меняться при работе скрипта - не изменилась. Не помогло.

#160472

valet, попробуйте исключить поле «root» из вашего файла, командой crontab -e, запущенной от определённого пользователя, вы создаёте crontab-файл для этого пользователя и, IMHO, самого пользователя в нём указывать не надо.

#160474

Его исключить как поле, то есть табы тоже удалить или просто стереть его значение?

#160475

valet, там было бы достаточно и пробелов, зачем <Tab>? wink
Приведите файл к такому виду

text
30 * * * * /var/www/pp/pp_cron
#160476

Сделал, не помогло.

#160477

Не знаю относится ли это к дело, но в /var/log/syslog в конце вижу такую запись:
[console]/USR/SBIN/CRON[2986]: (root) CMD (command -v debian-sa1 > /dev/null && debian-sa1 1 1)[/console]

#160478

Да, это что-то с кроном связано, нагуглил как писать лог крона в отдельный файл, в /etc/rsyslog.conf раскоментировал
[console]cron.* /var/log/cron.log[/console]
и сделал:
[console]/etc/init.d/rsyslog restart[/console]

Теперь в /var/log/cron.log вижу:
[console]May 11 01:05:01 server /USR/SBIN/CRON[3073]: (root) CMD (command -v debian-sa1 > /dev/null && debian-sa1 1 1)
May 11 01:09:01 server /USR/SBIN/CRON[3113]: (root) CMD ( [ -x /usr/lib/php5/maxlifetime ] && [ -d /var/lib/php5 ] && find /var/lib/php5/ -type f -cmin +$(/usr/lib/php5/maxlifetime) -print0 | xargs -n 200 -r -0 rm)[/console]

Что это, почему через 4 минуты и почему нет ничего о моей команде не знаю.

#160499

valet, покажите вывод команды
[console]crontab -l[/console]

Покажите сам скрипт, который должен запускаться.

P.S. Написал для проверки

text

gentoo-laptop ~lupo # crontab -l
# DO NOT EDIT THIS FILE - edit the master and reinstall.
# (/tmp/crontab.XXXXbkAYYg installed on Wed May 11 07:20:57 2011)
# (Cron version V5.0 -- $Id: crontab.c,v 1.12 2004/01/23 18:56:42 vixie Exp $)
* * * * * logger "All OK"

Теперь в логах вижу:

text

gentoo-laptop lupo # grep '\[cron\]' /var/log/everything/current
May 11 07:23:28 [cron] (CRON) STARTUP (V5.0)
May 11 07:24:01 [cron] (root) CMD (logger "All OK")
May 11 07:25:01 [cron] (root) CMD (logger "All OK")
May 11 07:26:01 [cron] (root) CMD (logger "All OK")
May 11 07:27:01 [cron] (root) CMD (logger "All OK")
May 11 07:28:01 [cron] (root) CMD (logger "All OK")
May 11 07:29:01 [cron] (root) CMD (logger "All OK")

Попробуйте создать подобное задание. Хотелось бы локализовать проблему: cron виноват или скрипт, который вы хотите запустить.

#160527

valet,

1) строки в системных файлах всегда заканчиваются символом \n (следствие №1 - не надо юзать всякие маздайные блокноты из венды. Следствие №2 - посл. строка должна быть пустой.)
2) поля в системных фалах разделены любым количеством табуляций и/или пробелов.
3) в самих полях нет пробелов и табуляций (исключение - последнее поле)
4) вместо того, что-бы заниматься ерундой, перенаправте вывод в лог

text
30 * * * * /var/www/pp/pp_cron 2>&1 >>/var/log/pp.log

и потом этот лог читайте. Читать можно в реалтайме
[console]# tail -f /var/log/pp.log[/console]

#160662
Lupo Alberto написал:
Хотелось бы локализовать проблему: cron виноват или скрипт, который вы хотите запустить.

Скрипт точно не виноват, он прекрасно отрабатывает с любого места (в скрипте первой командой идет переход в рабочую папку cd /var/www/pp/), если запускать вручную.

Да, ваше задание работает, если оно даже в crontab -e.

Lupo Alberto написал:
* * * * * logger "All OK"

Мое не работало, очевидно root-прав не хватало.

Оказалось, что есть еще и системный crontab: /etc/crontab
Я внес задание в него - и все сразу заработало.

drBatty написал:
1) строки в системных файлах всегда заканчиваются символом \n (следствие №1 - не надо юзать всякие маздайные блокноты из венды. Следствие №2 - посл. строка должна быть пустой.)

Как только перешел на linux, начал изучать vim. Уже сегодня могу сказать, что более удобного редактора не придумаешь...

drBatty написал:
2) поля в системных фалах разделены любым количеством табуляций и/или пробелов.
3) в самих полях нет пробелов и табуляций (исключение - последнее поле)
4) вместо того, что-бы заниматься ерундой, перенаправте вывод в лог

Это все было, результатов не было.

Всем спасибо за помощь, уже разобрался...

#160788
valet написал:
Скрипт точно не виноват, он прекрасно отрабатывает с любого места (в скрипте первой командой идет переход в рабочую папку cd /var/www/pp/), если запускать вручную.

вы ошибаетесь. Скрипт работает не в вакууме, а в окружении. Оно другое.

valet написал:
Мое не работало, очевидно root-прав не хватало.

дык напишите
[console]$ su -
# crontab -e[/console]

valet написал:
Оказалось, что есть еще и системный crontab: /etc/crontab
Я внес задание в него - и все сразу заработало.

это не системный, а рутовый. Его рут редактирует. А вы сделали неправильно (хотя и работает).

valet написал:
Как только перешел на linux, начал изучать vim. Уже сегодня могу сказать, что более удобного редактора не придумаешь...

я согласен. но емакеры нет :P

valet написал:
4) вместо того, что-бы заниматься ерундой, перенаправте вывод в лог
Это все было, результатов не было.

э... ну значит лог надо было делать в /tmp/, ибо в /var/log может писать только рут.

#160877
drBatty написал:
А вы сделали неправильно (хотя и работает).

А почему неправильно? И почему тогда работает :) Мне в принципе главное, чтобы работало. Но я догадываюсь, что вы имеете ввиду, что не надо было делать от рута. Возникает вопрос: почему, в чем опасность?

#161476
valet написал:
А почему неправильно? И почему тогда работает smile Мне в принципе главное, чтобы работало. Но я догадываюсь, что вы имеете ввиду, что не надо было делать от рута. Возникает вопрос: почему, в чем опасность?

работает потому-что повезло.
просто есть специальный инструмент для правки crontab'а

crontab -e

И системный кронтаб редактируется так же. Только надо сменить пользователя на рута. Можно делать иначе, ручками править. Вот посмотрите, к чему это приводит: http://linuxforum.ru/viewtopic.php?id=13479

#161896

drBatty, спасибо, буду иметь ввиду.

Войдите или зарегистрируйтесь, чтобы ответить.