在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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章