использование exec () для запуска команды unix `at` - PullRequest
3 голосов
/ 01 апреля 2011

Мне нужно запустить команду unix at с использованием PHP. Как это возможно сделать? curl не вариант того, что я делаю. Если я попытаюсь запустить его просто exec('at'), он не даст ответа. Хотя, если я запускаю его с помощью ssh, он работает нормально. Так что я думаю, что это проблема прав доступа / пути.

Ответы [ 4 ]

4 голосов
/ 05 апреля 2011

Помните, что "at" получает свой сценарий от stdin, поэтому вы захотите открыть канал для команды at с помощью popen ().Запишите свои команды в этот канал и закройте его.Время, когда вы хотите, чтобы команда at выполнялась, должно быть частью командной строки при открытии канала.

<?php
$r = popen('/usr/bin/at noon');
fwrite($r,"ls -l");
pclose($r);
?>
3 голосов
/ 01 апреля 2011

Полагаю, у вас есть какая-то настоящая at командная строка, потому что только at неверный синтаксис.Ваша команда должна содержать несколько аргументов.

Однако, возможно, ваша проблема в том, что at не в $PATH.Попробуйте запустить по полному пути, который обычно равен /usr/bin/at.Проверьте это с whereis at.

1 голос
/ 27 сентября 2013

Причина в файле "/etc/at.deny".Просканировав файл, вы увидите строку «www-data», в которой указан пользователь apache2 (в моем случае последняя строка в файле).Это запрещает пользователю «www-data» запускать команду «at».Просто удалите эту строку из /etc/at.deny.Затем вы можете запустить "at", используя "shell_exec".

Надеюсь, это поможет.

1 голос
/ 01 июня 2013

Запустите cat /etc/passwd, чтобы проверить, какая оболочка использует пользователя apache, если это bin/false, вы можете НЕ запустить 'at' от пользователя apache.

Я нашел хитрости для этой проблемы, экспортировав shell поверх bin / bash перед запуском команды shell, примерно так:

export SHELL = / bin / bash; echo "команда оболочки" | в: время:: дата:

и передача его в качестве аргумента функции php exec ().

Таким образом, вы сможете запускать планирование «из» из apache.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...