ДВА команды Linux, выполняемые в фоновом режиме, вызываемые функцией PHP exec () - PullRequest
1 голос
/ 11 июня 2019

Я пытаюсь выполнить две команды linux в фоновом режиме одним вызовом php exec ().

Моя первая команда создает резервные копии некоторых файлов:

cp -r ../source ../destination

Вторая команда создает файл "DONE.txt" после завершения резервного копирования:

touch ../destination/DONE.txt

Более того, я использую базув php manual и используйте следующий фоновый вызов exec ():

exec('bash -c "exec nohup setsid '.$twoCommands.' > /dev/null 2>&1 &"');

Весь код ниже:

exec('bash -c "exec nohup setsid { cp -r ../source ../destination && touch ../destination/DONE.txt; } > /dev/null 2>&1 &"');

И ... это не работает :) Но почему?

Если я использую только одну команду:

exec('bash -c "exec nohup setsid cp -r ../source ../destination > /dev/null 2>&1 &"');

Хорошо работает:)

1 Ответ

1 голос
/ 27 июня 2019

Понятия не имею, почему вы пытаетесь сделать это так сложно. nohup и setsid - это две совершенно разные функции, а не аргументы, которые вы передаете exec. Также вам даже не нужно вызывать exec в самой команде; в этом смысл использования exec в PHP. Перенаправление вывода необходимо только в том случае, если вам нужно, чтобы PHP-скрипт продолжал работать в фоновом режиме после вызова exec, а не ожидал его завершения.

[root@test~]# ll
total 8
drwxr-xr-x. 2 root root   24 Jun 27 13:40 source
[root@test~]# ll source
total 0
-rw-r--r--. 1 root root 0 Jun 27 13:40 1
-rw-r--r--. 1 root root 0 Jun 27 13:40 2
[root@test~]# php -a
Interactive shell

php > exec("cp -r ./source ./destination && touch ./destination/DONE.txt");
php > exit
[root@test~]# ll destination/
total 0
-rw-r--r--. 1 root root 0 Jun 27 13:44 1
-rw-r--r--. 1 root root 0 Jun 27 13:44 2
-rw-r--r--. 1 root root 0 Jun 27 13:44 DONE.txt
[root@test~]# 
...