Linux后台执行脚本的方式:
0、脚本代码
[root@VM_1_3_centos apps]# cat test.php <?php sleep(5); echo "hello world! ";
1、& 符号
当在前台运行某个作业时,终端被该作业占据;可以在命令后面加上& 实现后台运行。
示例1、
[root@VM_1_3_centos apps]# php test.php & [1] 28376 //进程ID [root@VM_1_3_centos apps]# jobs [1]+ Running php test.php & //5s后,脚本内容输出到控制台上 [root@VM_1_3_centos apps]# hello world! [1]+ Done php test.php [root@VM_1_3_centos apps]#
以上方式在命令产生输出时,会将脚本输出内容显示在控制台上,可能会影响控制台的操作。
示例2、结果输出到指定文件
[root@VM_1_3_centos apps]# php test.php >out.txt 2>&1 & [1] 29637 [root@VM_1_3_centos apps]# jobs [1]+ Running php test.php > out.txt 2>&1 & //当脚本执行完毕后,Enter控制台,就会输出Done脚本进程 [root@VM_1_3_centos apps]# [1]+ Done php test.php > out.txt 2>&1 [root@VM_1_3_centos apps]#
此时所有的标准输出和错误输出都将被重定向到out.txt文件中。
2、nohup
使用&命令时,关闭当前控制台窗口或退出当前帐户时,作业就会停止运行。
nohup命令则可以在退出帐户或关闭窗口后继续运行进程。
nohup即no hang up[不挂起]。
示例1、
[root@VM_1_3_centos apps]# nohup php test.php & [1] 1013 [root@VM_1_3_centos apps]# nohup: ignoring input and appending output to `nohup.out' [root@VM_1_3_centos apps]# jobs [1]+ Running nohup php test.php & [root@VM_1_3_centos apps]# vim nohup.out
默认情况下,nohup的进程脚本输出会被重定向到nohup.out的文件中。
示例2、结果输出到指定文件
[root@VM_1_3_centos apps]# nohup php test.php >out.txt 2>&1 & [1] 3550 [root@VM_1_3_centos apps]# jobs [1]+ Running nohup php test.php > out.txt 2>&1 & [root@VM_1_3_centos apps]#
此时所有的标准输出和错误输出都将被重定向到out.txt文件中。
许多人使用了nohup之后,就不再管了,其实这样有可能在当前账户非正常退出或者结束的时候,命令还是自己结束了。
所以在使用nohup命令后台运行命令之后,需要使用exit正常退出当前账户,这样才能保证命令一直在后台运行。
Note:解析以下命令
php test.php >out.txt 2>&1 &
php test.php >out.txt 表示将脚本的标准输出重定向到 out.txt 文件,不打印在屏幕上。
2>&1 表示将标准出错重定向到标准输出,由于我们的标准输出已经重定向到了 out.txt 文件,所以标准出错也会输出到 out.txt 文件中。
最后一个 & 符号, 是让该命令在后台执行。
那么2>1呢?
2 与 > 结合代表错误重定向,而 1 则代表错误重定向到一个文件1,而不代表标准输出;
换成2>&1,&与1结合就代表标准输出了,就变成错误重定向到标准输出.