通常情况下,Linux终端执行的命令是运行在前台的,一个命令执行完毕,才可以执行下一个命令,且终端一关闭,进程会被kill掉。但是,有时候希望进程运行在后台,可以采用下面几种方法:

  • &大法

    在命令后面添加&标记,则命令在当前终端的后台执行,用户可以接着执行其他命令。

  • nohup

    命令格式一般为 nohup command nohup command & 差别是带&的命令行,即使terminal(终端)关闭,或者电脑死机程序依然运行

  • screen/tmux/byobu

    这些其实是终端管理器,相当于终端一直存在,其上执行的命令要在后台运行要靠前2者实现。

  • supervisor

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    
    用Python开发的一套通用的进程管理程序,能将一个普通的命令行进程变为后台daemon,并监控进程状态,异常退出时能自动重启。
      
    安装supervisor
      
    Debian / Ubuntu可以直接通过apt安装:
      
    # apt-get install supervisor
    然后,给我们自己开发的应用程序编写一个配置文件,让supervisor来管理它。每个进程的配置文件都可以单独分拆,放在/etc/supervisor/conf.d/目录下,以.conf作为扩展名,例如,app.conf定义了一个gunicorn的进程:
      
    [program:app]
    command=/usr/bin/gunicorn -w 1 wsgiapp:application
    directory=/srv/www
    user=www-data
    其中,进程app定义在[program:app]中,command是命令,directory是进程的当前目录,user是进程运行的用户身份。
      
    重启supervisor,让配置文件生效,然后运行命令supervisorctl启动进程:
      
    # supervisorctl start app
    停止进程:
      
    # supervisorctl stop app
    如果要在命令行中使用变量,就需要自己先编写一个shell脚本:
      
    #!/bin/sh
    /usr/bin/gunicorn -w `grep -c ^processor /proc/cpuinfo` wsgiapp:application
    然后,加上x权限,再把command指向该shell脚本即可。