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

  • 相关阅读:
    微服务实战(二):使用API Gateway
    微服务实战(一):微服务架构的优势与不足
    在WIN7、WIN10操作系统用WebDAV映射网络驱动器需要的操作
    docker开机启动和docker-compose开机启动执行相应的各个docker容器
    /etc/rc.d/init.d自启动程序说明
    C# 通过反射实现对象映射:将2个属性相近的对象相互转换
    添加windows右键菜单:使用exe应用程序打开文件/文件夹
    .NET5 MVC Program.cs 笔记
    前端 JS 正则表达式积累
    VS Code 快捷键
  • 原文地址:https://www.cnblogs.com/deverz/p/11040743.html
Copyright © 2020-2023  润新知