Php выполнение сценария bash с командой at - PullRequest
0 голосов
/ 25 марта 2020

Здравствуйте. Я пытаюсь выполнить команду оболочки в моем скрипте php, но она не работает. Мой php скрипт:

           //I save the Order 
            $holdedOrder->save();
            $id = $holdedOrder->id;
            $old_path = getcwd();
            chdir(__DIR__.'/../');
            $scriptFile = 'anacron_job_unhold_order.sh';
            $bool = file_exists($scriptFile);
            //$bool is true !

            //this command works in shell but not in here do not know why
            $s = shell_exec("echo \"/usr/bin/bash $scriptFile $id\" | /usr/bin/at now +$when");
            chdir($old_path);
            return [$s,$bool];

$, когда имеет допустимое значение 4 hours или 4 days ... Команда будет:

echo bash anacron_job_unhold_order.sh 29 | at now +1 minutes

, выход равен нулю. Попытка с exec() возвращает 127 код

Редактировать: я удалил www-data из /etc/at.deny и все еще та же проблема

1 Ответ

0 голосов
/ 26 марта 2020

Команда shell_exec("echo \"/usr/bin/bash $scriptFile $id\" | /usr/bin/at now +$when");, вероятно, вызывает проблему, вы должны более внимательно посмотреть на , как at работает .

Команда должна выглядеть примерно так:

at [options] [job...]

Чтобы назначить команду at из команды вместо STDIN, используйте heredoc syntax

at now + 1 minute <<< 'touch /tmp/test'

Так что код PHP должен выглядеть примерно так:

$s = shell_exec("/usr/bin/at now + {$when} <<< '/usr/bin/bash {$scriptFile} {$id}'");
exec($s, $output, $return_var);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...