zoukankan      html  css  js  c++  java
  • Linux后台执行脚本 &与nohup

    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结合就代表标准输出了,就变成错误重定向到标准输出.

  • 相关阅读:
    20155230 《Java程序设计》实验五 Java网络编程及安全
    20155230 2016-2017-2《Java程序设计》课程总结
    20155230 实验四《android程序设计》实验报告
    20155230 实验三《敏捷开发与XP实践》实验报告
    20155230 实验二《Java面向对象程序设计》实验报告
    20155230 2016-2017-2 《Java程序设计》第十周学习总结
    20155230 2016-2017-2 《Java程序设计》第九周学习总结
    20155230 2016-2017-2 《Java程序设计》第八周学习总结
    2017-2018-1 20155203 20155204 《信息安全系统设计基础》实验一:开发环境的熟悉
    2017-2018-1 20155204 《信息安全系统设计基础》第三周学习总结
  • 原文地址:https://www.cnblogs.com/deverz/p/11040743.html
Copyright © 2011-2022 走看看