Я пытаюсь спланировать одноразовую работу с помощью команды «at». В скрипте есть следующий код:
$cmd = 'echo "/usr/bin/php '.$script_dir.$script_name.' '.$args.'"|/usr/bin/at "'.$time.'" 2>&1';
exec($cmd, $output , $exit_code);
Когда я запускаю эту команду из скрипта, она добавляет задание в схему. Это я вижу по строке в логах job 103 at Thu Sep 3 15:08:00 2015
(тот же текст содержит $output
). Но тогда ничего не происходит в указанное время, как at
игнорирует работу И нет никаких сообщений об ошибках в логах.
Когда я запускаю ту же команду с теми же аргументами из командной строки на сервере, она записывает задание и запускает его в указанное время.
Я обнаружил, что когда я пытаюсь планировать работу с помощью сценария php, он запускается под apache
пользователь. Я попытался запустить следующий в командной строке на сервере:
sudo -u apache echo "/usr/bin/php /var/www/pant/data/www/pant.com/scripts/Run.php firstarg secondarg "|/usr/bin/at "16:00 03.09.2015"
Это работает правильно тоже. Я проверил sudoers и добавил пользователя apache с привилегиями NOPASSWD. Скрипт Run.php имеет права на выполнение.
at.deny
пустой. at.allow
не существует.
Итак, вопрос: почему «at» не запускает команду, заданную через php-скрипт (exec), а запускает ту же команду в командной строке? Как запустить это?
Спасибо всем.
Я случайно нашел ответ на stackexchange.com:
«Проблема» обычно заключается в том, что PHP предназначен для работы в качестве модуля на веб-сервере. Возможно, вам придется установить версию php для командной строки, прежде чем вы сможете запускать сценарии php из командной строки
Других решений пока нет …