我想用php的exec命令执行多个shell命令。命令必须按顺序执行,我想用nohup启动它们,这样它就可以在后台运行,我的php脚本不必等待它完成。 这是我的剧本:
$command1="nohup convert -trim +repage pic1.png pic2.png; convert pic2.png -thumbnail 500x10000 pic3.png; convert pic2.png -resize 115x1000 -gravity Center -crop 115x196+0+0 +repage pic4.png; rm pic1.png; rm pic2.png > /dev/null 2> /dev/null & echo $";
$output = exec($command1 . ' 2>&1', $output, $return);
正如您所看到的,它需要按顺序排列,因为我想编辑之前已经修剪过的图片。命令本身和顺序部分运行良好,但nohup不适用于整个$ command1。我不确定它是否真的没有做任何事情或只是在最后一个命令(rm pic2.png)上工作。
非常感谢任何帮助。 感谢
答案 0 :(得分:2)
我解决了我的问题 - 即使这是一种解决方法。
我将shell脚本放入批处理脚本中,我使用exec("nohup batch.sh > /dev/null 2>&1 &");
在批处理脚本中,我执行shell命令,如下所示:nohup convert -trim +repage pic1.png pic2.png && nohup convert pic2.png -thumbnail 500x10000 pic3.png &
效果很好!
答案 1 :(得分:0)
我多年来一直在问自己,但我一直认为除了将所有命令放入脚本并执行它之外没有其他解决方案:nohup . ./multiplecommands.sh &
我不知道为什么我之前没有尝试过,但至少这个小小的测试工作正常。
并且错误后shell不会停止。
如果您将;
替换为&&
我认为它会
blup$ nohup echo ett > ~/tmp/nohup_on_multiple_commands_test_sep_thru_semicolon ; echo tvaa >> ~/tmp/nohup_on_multiple_commands_test_sep_thru_semicolon ; echo tre >> ~/tmp/nohup_on_multiple_commands_test_sep_thru_semicolon ; echo fyra >> ~/tmptypo/nohup_on_multiple_commands_test_sep_thru_semicolon ; echo fem >> ~/tmp/nohup_on_multiple_commands_test_sep_thru_semicolon ; cat ~/tmp/nohup_on_multiple_commands_test_sep_thru_semicolon &
nohup: ignoring input and redirecting stderr to stdout
bash: /home/blubber/tmptypo/nohup_on_multiple_commands_test_sep_thru_semicolon: No such file or directory
[3] 27136
blub$ ett #<-- this looks a bit ugly, though, but ignore the additional prompt now.
tvaa
tre
fem
[3]+ Done cat ~/tmp/nohup_on_multiple_commands_test_sep_thru_semicolon
blub$ cat ~/tmp/nohup_on_multiple_commands_test_sep_thru_semicolonett
tvaa
tre
fem
blub$
ERGO:echo fyra
未执行,但echo fem
是。
与AND
= &&
而不是;
blub2$ nohup echo one > ~/tmp/nohup_on_multiple_commands_test_sep_thru_semicolon && echo two >> ~/tmp/nohup_on_multiple_commands_test_sep_thru_semicolon && echo threefour >> ~/tmptypo/nohup_on_multiple_commands_test_sep_thru_semicolon && echo five >> ~/tmp/nohup_on_multiple_commands_test_sep_thru_semicolon ; cat ~/tmp/nohup_on_multiple_commands_test_sep_thru_semicolon &nohup: ignoring input and redirecting stderr to stdout
bash: /home/blubber2/tmptypo/nohup_on_multiple_commands_test_sep_thru_semicolon: No such file or directory
[3] 28744
blub$ one
two
[3]+ Done cat ~/tmp/nohup_on_multiple_commands_test_sep_thru_semicolon
blub$ cat ~/tmp/nohup_on_multiple_commands_test_sep_thru_semicolon
one
two
blub$
ERGO:如果您需要退出后失败,请使用&&
代替;