Linux服務和systemctl詳解


定義

A Linux service is an application (or set of applications) that runs in the background waiting to be used, or carrying out essential tasks.

也就是說,Linux服務是在后台運行的應用程序(或一組應用程序),正在等待執行或正在執行基本任務。
在Linux或者Unix系統中,服務也被稱為Daemons(守護進程)。它們運行在后台,為一些程序提供服務。比如我們熟知的sshd服務(其中d指的就是daemon),它就是ssh命令的相應守護進程。

兩個命令

service命令

service 命令通常用於控制服務的一些狀態,其使用方法如下

Usage: service < option > | --status-all | [ service_name [ command | --full-restart ] ]

其中它會去/etc/init.d/目錄中尋找service_name,一些基本例子如下(為方便演示,以sshd為例,並且以root身份運行,因此省略了可能的sudo):

  • 查看當前所有服務[+]表示正在運行的,[-]表示當前沒有運行,[?]表示因某種原因不能確定其運行狀態:
service --status-all
  • 查看單個服務的狀態:
service sshd status
  • 啟動停止重啟重載服務
service sshd start
service sshd stop
service sshd restart
service sshd reload 

systemctl命令

systemctl是一個新的用來控制systemd和service的工具,用來取代舊的SysV init 系統管理。
主要語法:

systemctl [OPTION] [SERVICE]

下面給出些基本操作,注意事項同上

  • 查看單個服務的狀態:
systemctl status sshd

或者systemctl is-active sshd來查看服務是否運行

  • 啟動停止重啟重載服務
systemctl start sshd
systemctl stop sshd
systemctl restart sshd
systemctl reload sshd
  • 查看所有服務,這里的服務非常詳細
systemctl list-unit-files

或者

systemctl list-units --type service

其中Enabled表明服務正在運行;Disabled表明服務當前沒有運行;Masked表示服務不會被運行,除非我們手動移除這個標志;Static表示服務只有在別的服務或單元需要它時才被使用。

  • 開機自啟
systemctl enable sshd

或者

systemctl disable sshd

來取消開機自啟

service和systemctl的比較

總的來說,后者(systemctl)的功能比前者要強大得多,前者的功能后者似乎都包括,而且后者還含有不少前者所沒有的功能。
另外我還看到有些linux發行版本會將service命令重定向為systemctl命令,如下圖所示:
在這里插入圖片描述

創建服務

首先創建服務的執行的代碼,也就是將某個程序的運行代碼轉為服務。
這里以我的一個程序為例,/root/flynet -M socks-tcp -L 8888,運行之后會監聽8888端口。具體這個程序的用途在這里並不重要,我們只用知道運行之后它會監聽相應端口即可。

然后在/etc/systemd/system目錄下新建一個文件,我這里以flynet.service為例,內容為:

[Unit]
Description=Flynet service
After=network.target

[Service]
ExecStart=/root/flynet -M socks-tcp -L 8888
Restart=always

[Install]
WantedBy=multi-user.target

其中Description為該服務的描述;After為服務的啟動順序,表示在某種條件達到后才執行,這里表示的在網絡就緒之后運行;ExecStart即為你要執行的目標代碼;Restart表示當該服務因某種原因退出之后,自動啟動的配置;WantedBy表示安裝的對象,這里表示多用戶。

服務創建好之后,然后可以通過下面的命令來啟動服務

systemctl start flynet

還可以通過下面的命令來實現開機自啟

systemctl enable flynet

其他

開機自啟

現在開機自啟的實現方式中,比較常用的有兩種,其一就是上文中的創建服務,另一種就是cron

cron主要用於定時任務,不過也可以實現開機自啟。
下面也簡單介紹下cron的,首先輸入

crontab -e

然后選擇你喜歡的輸入法,之后再輸入

@reboot /home/user/test.sh 

這里表示的是開機會自動運行后面的腳本文件,當然后面內容的內容是自定義的,也可以是單個命令,而不局限於腳本文件。之后再保存即可。

這樣就使用cron實現了開機自啟,更多cron可以參考我這篇博客


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM