Назад | Перейти на главную страницу

Почему эта команда для отправки писем работает из оболочки, но не как задание cron?

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

curl "http://example.com/index.php?option=com_community&task=cron">/dev/null 2>&1

Когда я запускаю эту команду в оболочке, она работает и отправляет электронные письма, но когда я пытаюсь установить задание cron, она не отправляет электронные письма:

Вот мой /etc/cron.d:

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
05,45 * * * * root run-parts /etc/cron.hourly

Предполагается, что запускается задание /etc/cron.hourly cron, вот /etc/cron.hourly/0anacron:

#!/bin/bash
# Skip excecution unless the date has changed from the previous run
if test -r /var/spool/anacron/cron.daily; then
    day=`cat /var/spool/anacron/cron.daily`
fi
if [ `date +%Y%m%d` = "$day" ]; then
    exit 0;
fi

# Skip excecution unless AC powered
if test -x /usr/bin/on_ac_power; then
    /usr/bin/on_ac_power &> /dev/null
   if test $? -eq 1; then
    exit 0
     fi
fi
/usr/sbin/anacron -s
curl "http://example.com/index.php?option=com_community&task=cron">/dev/null 2>&1

Вот журнал cron, он показывает, что задание cron запущено

Aug  2 16:45:01 u17669867 CROND[3164]: (root) CMD (run-parts /etc/cron.hourly)
Aug  2 16:45:01 u17669867 run-parts(/etc/cron.hourly)[3164]: starting 0anacron
Aug  2 16:45:01 u17669867 run-parts(/etc/cron.hourly)[3173]: finished 0anacron

Может, что-то не так в /etc/cron.hourly/0anacron?

Вы добавили свой код прямо в 0anacron файл??

Вот что здесь не так; не делай этого.

проверьте страницу руководства для anacron:

Anacron можно использовать для периодического выполнения команд с частотой, указанной в днях. В отличие от cron (8), он не предполагает, что машина работает постоянно.

Ясно, что это не связано с тем, что вы имеете в виду со своими электронными письмами, и если вы проверите сценарий, то увидите, что есть большая вероятность, что сценарий exited 0 прежде чем приступить к своей задаче.

В любом случае попробуйте поставить

curl "http://example.com/index.php?option=com_community&task=cron">/dev/null 2>&1

Внутри файла с названием что-то вроде /etc/cron.hourly/1send_emails. Отрежьте его до root и сделайте исполняемым.

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

Если вы хотите указать свое собственное выражение cron или запускать от имени другого пользователя, а не root, поместите аналогичный файл с вашей строкой с префиксом выражения cron и пользователем для запуска, как и до запуска задания /etc/cron.d вместо.