Добавляю в crontab -e
строку
[console]30 * * * * root /var/www/pp/pp_cron[/console]
Если запускать /var/www/pp/pp_cron - скрипт прекрасно отрабатывает.
Вопрос: почему он не работает через cron? Что я делаю не так?
Заранее спасибо.
Подскажите почему не работает crontab
valet, перевод строки в конце файла есть?
Lupo Alberto, не было, добавил, подождал больше минуты, проверил через ls -la дату файла, который должен меняться при работе скрипта - не изменилась. Не помогло.
valet, попробуйте исключить поле «root» из вашего файла, командой crontab -e, запущенной от определённого пользователя, вы создаёте crontab-файл для этого пользователя и, IMHO, самого пользователя в нём указывать не надо.
Его исключить как поле, то есть табы тоже удалить или просто стереть его значение?
valet, там было бы достаточно и пробелов, зачем <Tab>? wink
Приведите файл к такому виду
30 * * * * /var/www/pp/pp_cronСделал, не помогло.
Не знаю относится ли это к дело, но в /var/log/syslog в конце вижу такую запись:
[console]/USR/SBIN/CRON[2986]: (root) CMD (command -v debian-sa1 > /dev/null && debian-sa1 1 1)[/console]
Да, это что-то с кроном связано, нагуглил как писать лог крона в отдельный файл, в /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 минуты и почему нет ничего о моей команде не знаю.
valet, покажите вывод команды
[console]crontab -l[/console]
Покажите сам скрипт, который должен запускаться.
P.S. Написал для проверки
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"
Теперь в логах вижу:
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 виноват или скрипт, который вы хотите запустить.
valet,
1) строки в системных файлах всегда заканчиваются символом \n (следствие №1 - не надо юзать всякие маздайные блокноты из венды. Следствие №2 - посл. строка должна быть пустой.)
2) поля в системных фалах разделены любым количеством табуляций и/или пробелов.
3) в самих полях нет пробелов и табуляций (исключение - последнее поле)
4) вместо того, что-бы заниматься ерундой, перенаправте вывод в лог
30 * * * * /var/www/pp/pp_cron 2>&1 >>/var/log/pp.logи потом этот лог читайте. Читать можно в реалтайме
[console]# tail -f /var/log/pp.log[/console]
Хотелось бы локализовать проблему: cron виноват или скрипт, который вы хотите запустить.
Скрипт точно не виноват, он прекрасно отрабатывает с любого места (в скрипте первой командой идет переход в рабочую папку cd /var/www/pp/), если запускать вручную.
Да, ваше задание работает, если оно даже в crontab -e.
* * * * * logger "All OK"
Мое не работало, очевидно root-прав не хватало.
Оказалось, что есть еще и системный crontab: /etc/crontab
Я внес задание в него - и все сразу заработало.
1) строки в системных файлах всегда заканчиваются символом \n (следствие №1 - не надо юзать всякие маздайные блокноты из венды. Следствие №2 - посл. строка должна быть пустой.)
Как только перешел на linux, начал изучать vim. Уже сегодня могу сказать, что более удобного редактора не придумаешь...
2) поля в системных фалах разделены любым количеством табуляций и/или пробелов.
3) в самих полях нет пробелов и табуляций (исключение - последнее поле)
4) вместо того, что-бы заниматься ерундой, перенаправте вывод в лог
Это все было, результатов не было.
Всем спасибо за помощь, уже разобрался...
Скрипт точно не виноват, он прекрасно отрабатывает с любого места (в скрипте первой командой идет переход в рабочую папку cd /var/www/pp/), если запускать вручную.
вы ошибаетесь. Скрипт работает не в вакууме, а в окружении. Оно другое.
Мое не работало, очевидно root-прав не хватало.
дык напишите
[console]$ su -
# crontab -e[/console]
Оказалось, что есть еще и системный crontab: /etc/crontab
Я внес задание в него - и все сразу заработало.
это не системный, а рутовый. Его рут редактирует. А вы сделали неправильно (хотя и работает).
Как только перешел на linux, начал изучать vim. Уже сегодня могу сказать, что более удобного редактора не придумаешь...
я согласен. но емакеры нет :P
4) вместо того, что-бы заниматься ерундой, перенаправте вывод в лог
Это все было, результатов не было.
э... ну значит лог надо было делать в /tmp/, ибо в /var/log может писать только рут.
А вы сделали неправильно (хотя и работает).
А почему неправильно? И почему тогда работает :) Мне в принципе главное, чтобы работало. Но я догадываюсь, что вы имеете ввиду, что не надо было делать от рута. Возникает вопрос: почему, в чем опасность?
А почему неправильно? И почему тогда работает smile Мне в принципе главное, чтобы работало. Но я догадываюсь, что вы имеете ввиду, что не надо было делать от рута. Возникает вопрос: почему, в чем опасность?
работает потому-что повезло.
просто есть специальный инструмент для правки crontab'а
crontab -e
И системный кронтаб редактируется так же. Только надо сменить пользователя на рута. Можно делать иначе, ручками править. Вот посмотрите, к чему это приводит: http://linuxforum.ru/viewtopic.php?id=13479
drBatty, спасибо, буду иметь ввиду.