Я работаю над небольшим приложением, чтобы позвонить в школьные колокола по расписанию, которое можно обновить с веб-сайта. Все работает отлично, за исключением того, что сценарий, который запланирован как задание cron, не будет воспроизводить звук при запуске скрипта. Я добавил скрипт вывода и команды эха скрипту, чтобы проверить, работает ли cron, но часть, которая воспроизводит звук, не работает. Сценарий работает, как ожидается, при запуске вручную из CLI.Почему мой скрипт PHP cron не воспроизводится?
Скрипт извлекает время и звуковой файл для каждого периода дня по графике, а затем сравнивает время, связанное со звуковым файлом с текущим временем - если это матч, он будет
exec("/usr/bin/aplay /var/www/site/".$soundfile);
Cron затем планируется запустить этот скрипт каждую минуту в течение учебного дня:
* 8-16 * 1-6,9-12 1-5 root /usr/bin/php -f /var/www/site/scripts/playsound.php > /dev/null
Опять же, если я вручную запустить сценарий, когда есть звук по расписанию, звук воспроизводится через прилагаемые громкоговорители. Когда у меня есть тестовый код, который будет эхом на экран или выводится на введенный файл, cron будет выгружать вывод в файлы, подтверждая, что он запускает скрипт по расписанию. Он просто не будет воспроизводить звуковую часть скрипта.
Я проверил все мои права, и, поскольку все остальное работает, они кажутся точными. Я даже могу написать простой сценарий BASH, чтобы заставить Cron воспроизводить звук по расписанию, поэтому кажется, что система имеет право членства в группах для доступа к скрипту и звуковому файлу. Я отключил exec()
для shell_exec()
, попробовал использовать только команды, а также абсолютные пути к командам, а задание cron планируется запустить с правами root. Все еще не могу понять, почему эта небольшая функция, к сожалению, столь важная для этой программы, не будет работать.
Любые советы приветствуются.
Это больше похоже на вопрос для другого сайта SE. Для Ubuntu есть ответ здесь: http://askubuntu.com/questions/530048/ubuntu-14-04-and-playing-songs-from-cron Может быть полезно в других вариантах nix. – developerwjk
Попробуйте добавить это к exec: 'exec ('...>/tmp/cronlog 2> & 1')' и проверить файл журнала '/ tmp/cronlog', если есть какая-либо ошибка. Если 'aplay' нуждается в X, вам нужно убедиться, что root имеет доступ к активному сеансу X (см. Команду' xhost'). Возможно, вы захотите использовать пользователя, который имеет активный сеанс для задания cron. – fejese
Это может помочь: http://stackoverflow.com/a/22744360/1163786 - Один совет: не подавляйте ошибки при отладке проблем cronjob. Повысить уровень ведения журнала. –