Как получить вывод команды "at" в php? - PullRequest
0 голосов
/ 28 мая 2011

Я хочу выполнить команду «at» оболочки и получить обратно полученное состояние, я использовал следующий скрипт, который добавляет запись в список запланированных заданий и выполняет ее через одну минуту (просто пример):

try{
    $output = shell_exec("at now + 1 minutes \n curl http://www.mysite.com/test.php?key=value");
    echo $output;
}
catch (Exception $e) {
    echo "Error :" . $e->getMessage();
}

Команда выполнена хорошо (я проверил это с помощью команды оболочки "atq", и скрипт страницы test.php также был выполнен, как и планировалось через минуту), но переменная $ output ничего не вернула!

Я использовал функции exec, system и passthru вместо shell_exec, но всегда ничего не выводил.

Я хочу получить возвращаемое значение этой функции, чтобы получить добавленный идентификатор задания и сохранить его для последующего использования (например, удаление этого задания).

Ответы [ 2 ]

0 голосов
/ 28 мая 2011

Вместо того, чтобы пытаться настроить вашу команду таким образом, вы можете использовать echo с каналом, чтобы делать то, что вы хотите:

try{
    $output = shell_exec('echo "curl \'http://www.mysite.com/test.php?key=value\'" | at now + 1 minutes');
    echo $output;
}
catch (Exception $e) {
    echo "Error :" . $e->getMessage();
}
0 голосов
/ 28 мая 2011

это не сработает. входные данные программы, которые вы разделили с помощью символа новой строки, не являются частью команды оболочки, вызывающей программу. эти данные должны быть переданы в STDIN программы после ее запуска.

Вы должны открыть программу и иметь указатели ресурсов для стандартного ввода и стандартного вывода. чем вы можете читать / писать в / из них

посмотрите документацию и примеры этой функции php:

http://www.php.net/manual/en/function.proc-open.php

как для "как получить вывод":

это как-то неактуально, потому что вы не можете использовать программу, как вы, вероятно, хотите с этим методом. но если вы просто хотите захватить / передать данные из STDOUT, вы можете использовать passthru (). Вы можете включить буферизацию вывода для захвата вывода. это, например, полезно, если вы хотите отобразить строку состояния rsync в вызывающем ее скрипте php-cli.

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