在Linux上部署程序

nohup &

程序在Linux上运行时,如果关闭session,程序会因为收到SIGHUP信号结束,使用nohup可以免疫该信号。如果使用Ctrl+C,程序会因为收到SIGINT信号结束,使用&可以免疫该信号。

nohup和&常常一起使用,这个时候会同时免疫SIGHUP和SIGINT信号:

nohup command &

systemd

systemd是Linux系统的第一个进程,使用systemd可以创建服务来运行程序,systemctl是systemd的主命令,可以用来管理服务,下面是常见的systemctl命令:

# 启动服务
systemctl start servicename

# 停止服务
systemctl stop servicename

# 重启服务
systemctl restart servicename

# 杀死一个服务的所有子进程
systemctl kill servicename

# 重新加载一个服务的配置文件
systemctl reload servicename

# 开机启动该服务
systemctl enable servicename

# 开机不启动该服务
systemctl disable servicename

# 查看服务当前状态
systemctl status servicename

service配置文件存在以下三个文件夹中,优先级依此降低:

  • /etc/systemd/system
  • /run/systemd/system
  • /usr/lib/systemd/system或/lib/systemd/system

service配置文件通常由3段组成,分别是[Unit],[Unit的类型:Service等],[Install]。

[Unit]常见参数:

  • Description:描述信息。
  • After:表明在哪个Unit后面启动。
  • Before:表明在哪个Unit前面启动。
  • Requires:强依赖的Unit,如果这些Unit没启动,那么该Unit也不会启动。
  • Wants:弱依赖的Unit,启动该Unit后最好还启动哪些Unit。
  • Conflicts:与哪些Unit冲突,如果这些Unit启动了,那么该Unit不启动。

[Service]常见参数:

  • ExecStart:启动服务执行的命令。
  • ExecStop:停止服务执行的命令。
  • ExecReload:重新加载服务执行的命令。
  • ExecStartPre:启动服务之前执行的命令。
  • ExecStartPost字段:启动服务之后执行的命令。
  • ExecStopPost字段:停止服务之后执行的命令。
  • RestartSec:表示 Systemd 重启服务之前,需要等待的秒数,默认是100毫秒。
  • RemainAfterExit:如果设定为yes,表示进程退出以后,服务仍然保持执行。
  • Type:启动类型,它可以设置为下面的值:
    • simple(默认值):ExecStart字段启动的进程为主进程。
    • forking:ExecStart字段将以fork()方式启动,此时父进程将会退出,子进程将成为主进程。
    • oneshot:类似于simple,但只执行一次,Systemd 会等它执行完,才启动其他服务。
    • dbus:类似于simple,但会等待 D-Bus 信号后启动。
    • notify:类似于simple,启动结束后会发出通知信号,然后 Systemd 再启动其他服务。
    • idle:类似于simple,但是要等到其他任务都执行完,才会启动该服务。一种使用场合是为让该服务的输出,不与其他服务的输出相混合。
  • Restart:定义了服务退出后的重启方式,它可以设置为下面的值:
    • no(默认值):退出后不会重启。
    • on-success:只有正常退出时(退出状态码为0),才会重启。
    • on-failure:非正常退出时(退出状态码非0),包括被信号终止和超时,才会重启。
    • on-abnormal:只有被信号终止和超时,才会重启。
    • on-abort:只有在收到没有捕捉到的信号终止时,才会重启。
    • on-watchdog:超时退出,才会重启。
    • always:不管是什么退出原因,总是重启。
  • KillMode:定义了systemd如何停止服务,它可以设置为下面的值:
    • control-group(默认值):当前控制组里面的所有子进程,都会被杀掉。
    • process:只杀主进程。
    • mixed:主进程将收到 SIGTERM 信号,子进程收到 SIGKILL 信号。
    • none:没有进程会被杀掉,只是执行服务的 stop 命令。

[Install]常见参数:

  • WantedBy:表示该服务所在的Target,Target的含义是服务组,表示一组服务,默认的启动Target为multi-user.target。

hello.service:

[Unit]
Description=hello world

[Service]
Type=simple
ExecStart=/bin/hello

[Install]
WantedBy=multi-user.target

你可能感兴趣的:(在Linux上部署程序)