Linux 后台执行

很多时候我们只是单纯的想让某个小程序一直持续在后台运行,即使跟远程服务器断开连接也不会让他退出,一般情况电脑注销或者进入屏保或者关闭远程连接都会让我们跑得程序立马中止,这时候我们只需要小小的设置一下就可以了(配合nohup和&达到目的)。

  • 方法一

    • 写脚本程序

      1.vim start.sh # 编辑一下脚本文件,内容如下
      #!/bin/bash
      cd /srv/mozu/HardwareTestServer # 表示要运行的程序的文件路径
      python -u commandTcpServer.py # 用合适的命令去运行的需要的程序文件,-u参数表示不启用缓冲,让我们能立马看到输出信息
      2.esc-> :-> wq退出vim模式
      
    • 运行脚本程序

        1.执行-> ./start.sh & # 这个时候其实程序就运行起来了,只是还是会在屏保或者注销的时候自动停止
        2.z执行-> ll # 这时候可以看到当前目录多了一个nohup.out,这是程序的的标准输出去向的文件,比如一些打印不会出现在控制台,而是写入这个文件
            [root@tingxun-mozu ~]# ll
            total 132
            -rw-r--r-- 1 root root 123912 Jan 12  2004 netcat-0.7.1-1.i386.rpm
            -rw------- 1 root root      0 Dec 11 16:23 nohup.out
            -rw-r--r-- 1 root root    115 Dec 11 16:54 result.log
            -rwxr-xr-x 1 root root     74 Dec 11 16:15 start.sh
      
    • 配合nohup命令让进程不挂起

        1.执行-> nohup ./start.sh & # 这样就让程序后台不挂起的跑起来了
        2.不过我碰到过两个问题
            >1.start.sh文件权限问题,导致执行不了
                执行-> chmod +x ./start.sh # 修改一下权限
            >2.nohup: redirecting stderr to stdout,直接把标准错误输出重新定向到标准输出文件就好了
                执行-> nohup ./start.sh >result.log 2>&1 & # 执行这个命令如果没有result.log会自动帮你创建,
                      同时2表示标准错误输出(1表示标准输出),这里把2定向到1的意思
                      最后的&符号表示后台运行
      
  • 方法二

    其实也不能说方法二吧,应该是直接相当于把脚本程序一气呵成的命令运行。
    个人觉得还是蛮长的,如果不嫌弃的话,那就懒得写脚本。
    还有其他别的方法就不一一试了,一种就够了,怪累的。

          1.执行-> nohup python -u /srv/mozu/HardwareTestServer/commandTcpServer.py >/var/log/mozu/test_hard.log 2>&1 &
    
  • 查看我们的脚本是否在运行

      1.执行-> ps -ef|grep start
          root     11166 27408  0 19:53 pts/0    00:00:00 grep --color=auto start
          root     24640     1  0 16:54 ?        00:00:00 /bin/bash ./start.sh
      2.如果想停止重新运行,则只需要杀死当前进程(24640)就好了
        执行-> kill 24640 # 杀死脚本进程
        执行-> nohup ./start.sh >result.log 2>&1 &
    

results matching ""

    No results matching ""