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服務是在後臺運行的應用程序(或一組應用程序),正在等待執行或正在執行基本任務。 在Linux或者Unix系統中,服務也被稱爲Daemons(守護進程)。它們運行在後臺,爲一些程序提供服務。好比咱們熟知的sshd服務(其中d指的就是daemon),它就是ssh命令的相應守護進程。shell

兩個命令

service命令

service 命令一般用於控制服務的一些狀態,其使用方法以下網絡

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

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

  • 查看當前全部服務[+]表示正在運行的,[-]表示當前沒有運行,[?]表示因某種緣由不能肯定其運行狀態:
service --status-all
  • 查看單個服務的狀態:
service sshd status
  • 啓動中止重啓重載服務
service sshd start
service sshd stop
service sshd restart
service sshd reload

systemctl命令

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

systemctl [OPTION] [SERVICE]

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

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

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

  • 啓動中止重啓重載服務
systemctl start sshd
systemctl stop sshd
systemctl restart sshd
systemctl reload sshd
  • 查看全部服務,這裏的服務很是詳細
systemctl list-unit-files

或者spa

systemctl list-units --type service

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

  • 開機自啓
systemctl enable sshd

或者code

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能夠參考我這篇博客

相關文章
相關標籤/搜索