我需要一个脚本执行(bash或perl或php,任何会做)另一个命令然后退出,而另一个命令仍然运行并自行退出。我可以通过命令安排,但是如果有一个更简单的方法,我很好奇。
答案 0 :(得分:24)
#!/bin/sh
your_cmd &
echo "started your_cmd, now exiting!"
perl和php存在类似的结构,但在sh / bash中,很容易在后台运行另一个命令并继续。
修改强>
通用流程操作的一个非常好的来源是/etc/init.d
下的所有启动脚本。他们做各种巧妙的技巧,如跟踪pid,执行基本的启动/停止/重启命令等。
答案 1 :(得分:14)
要在后台运行命令,您可以追加'&'命令。
如果您需要程序超过登录会话,可以使用nohup。
请参阅此类似的stackoverflow讨论:how to run a command in the background ...
答案 2 :(得分:5)
运行命令并让它在注销时继续运行的常用方法是使用nohup(1)
。 nohup
阻止给定命令在shell退出时接收HUP信号。您还需要使用&符号(&)命令后缀在后台运行。
$ nohup some_command arg1 arg2 &
答案 3 :(得分:4)
&
?
#!/usr/bin/bash # command1.sh: execute command2.sh and exit command2.sh &
答案 4 :(得分:4)
我不完全确定这是否是您正在寻找的内容,但您可以通过将&符号(&)符号作为命令的最后一个字符附加在shell中执行的处理。
所以如果你有脚本,a.sh
和a.sh需要生成一个单独的进程,比如执行脚本b.sh,你要:
b.sh &
答案 5 :(得分:3)
只要你提到Perl:
fork || exec "ls";
......其中“ls”是任何东西。重复您需要启动的任意数量的命令。
答案 6 :(得分:0)
大多数答案显示正确..
mycmd &
camh 的回答更进一步,使用 nohup 使其保持活力。
更进一步的高级主题...
mycmd1 &
mycmd2 &
mycmd3 &
wait
"wait" 将阻塞处理,直到后台任务全部完成。如果响应时间很长,例如系统外数据收集,这会很有用。如果您确定它们会完成,这会有所帮助。
我如何随后将进程置于前台? 如果您打算在后续登录时将进程置于前台,请查看 screen 或 tmux。
screen -dmS MVS ./mvs
或(Minecraft 示例)。
screen -dm java -Xmx4096M -Xms1024M -jar server.jar nogui
您可以在后续登录时重新连接到终端。
screen -r
启动这些的登录不需要是交互式的,您可以远程使用 ssh(plink、Ansible 等)以“驱动”方式生成这些。