定義
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可以參考我這篇博客