1. 程式人生 > >第7章 後臺服務程式

第7章 後臺服務程式


  
 
 
  系統保持安全執行是非常重要的,仔細的管理好系統服務的准入對此是很有幫助的。系統需要對一些特殊程式提供准入(比如WEB伺服器的HTTPD服務)。然而,如果你不需要此類服務,那麼你應該關閉它,以讓你的系統可能暴露的BUG最小化。 
 
 
  本章講的是系統執行時的服務的相關配置,以及如何使用systemctl工具從命令列重啟服務。 
 
 
  保持系統安全:當你啟用一項新的服務時,記得防火牆和selinux也需要一同配置。配置一項新服務時最容易犯的錯誤就是沒有修改防火牆和selinux配置,以允許其啟用。 
 
 
  7.1 配置服務 
 
 
  FEDORA使用systemctl工具配置系統啟動時自動啟用的服務。 
 
 
  不要使用ntsysv和chkconfig工具:儘管仍然可以使用ntsysv和chkconfig工具管理服務(通過安裝到/etc/rc.d/init.d/目錄裡的指令碼),但仍建議你使用systemctl工具來管理服務。 
 
 
  啟用irqbalance服務:建議啟用irqbalance服務。大多數情況下,這個服務已在FEDORA23上自動安裝和配置,驗證執行狀態使用如下命令: 
 
 
  systemctl status irqbalance.service 
 
 
  7.1.1 啟用服務 
 
 
  系統啟動時自動啟用服務的配置方法: 
 
 
  systemctl enable service_name.service 
 
 
  下次系統啟動時將自動啟動該服務。 
 
 
  例子7.1 啟用HTTPD服務 
 
 
  假設你正在執行apache http伺服器,httpd包已經安裝,你可以讓系統啟動時自動啟動此服務: 
 
 
  ~]# systemctl enable httpd.service 
 
 
  7.1.2 停用服務 
 
 
  關閉某項服務隨系統自動啟動的命令如下: 
 
 
  systemctl disable service_name.service 
 
 
  下次系統啟動時,該服務將不會啟動。 
 
 
  例子7.2 停用telnet服務 
 
 
  為了例系統更安全,建議使用者關閉不安全的連線協議,比如telnet。關閉該服務的命令如下: 
 
 
  ~]# systemctl disable telnet.service 
 
 
  7.2 執行服務 
 
 
  Systemctl允許你啟動、停止或重啟服務。 
 
 
  不要使用service工具:儘管你可以使用service命令管理服務(基於/etc/rc.d/init.d/目錄下的指令碼),但建議使用systemctl工具來管理。 
 
 
  7.2.1 檢查服務的狀態 
 
 
  下面的命令檢查服務的執行狀態: 
 
 
  systemctl status service_name.service 
 
 
  這個命令會顯示服務狀態的詳細資訊。如果你只是想驗證服務是否正在執行,你可以使用下面的systemctl命令: 
 
 
  systemctl is-active service_name.service 
 
 
  例子7.3 檢查httpd服務狀態 
 
 
  “例子7.1 啟用httpd服務”指出瞭如何在系統啟動時自動啟用httpd服務。假設系統已經重啟,你現在想驗證一下httpd是否在執行: 
 
 
  ~]$ systemctl is-active httpd.service 
 
 
  Active 
 
 
  你可以檢視詳細狀態: 
 
 
  ~]$ systemctl status httpd.service 
 
 
  httpd.service - LSB: start and stop Apache HTTP Server 
 
 
  Loaded: loaded (/etc/rc.d/init.d/httpd) 
 
 
  Active: active (running) since Mon, 23 May 2011 21:38:57 +0200; 27s ago 
 
 
  Process: 2997 ExecStart=/etc/rc.d/init.d/httpd start (code=exited, status=0/ 
 
 
  SUCCESS) 
 
 
  Main PID: 3002 (httpd) 
 
 
  CGroup: name=systemd:/system/httpd.service 
 
 
  ├ 3002 /usr/sbin/httpd 
 
 
  ├ 3004 /usr/sbin/httpd 
 
 
  ├ 3005 /usr/sbin/httpd 
 
 
  ├ 3006 /usr/sbin/httpd 
 
 
  ├ 3007 /usr/sbin/httpd 
 
 
  ├ 3008 /usr/sbin/httpd 
 
 
  ├ 3009 /usr/sbin/httpd 
 
 
  ├ 3010 /usr/sbin/httpd 
 
 
  └ 3011 /usr/sbin/httpd 
 
 
  顯示所有正在執行的服務,可以使用如下命令: 
 
 
  systemctl list-units --type=service 
 
 
  這個命令提供的資訊中: 
 
 
  Unit-systemd unit的名字,這個例子中顯示的是服務的名字 
 
 
  Load-顯示是否正確裝載 
 
 
  Active-高階unit啟用狀態 
 
 
  Sub-低階unit啟用狀態 
 
 
  Job-unit所佔用的任務 
 
 
  Description-unit的簡介 
 
 
  例子7.4 顯示所有啟用的服務 
 
 
  ~]$ systemctl list-units --type=service 
 
 
  UNIT LOAD ACTIVE SUB JOB DESCRIPTION 
 
 
  abrt-ccpp.service loaded active exited LSB: Installs coredump handler which 
 
 
  saves segfault data 
 
 
  abrt-oops.service loaded active running LSB: Watches system log for oops 
 
 
  messages, creates ABRT dump directories for each oops 
 
 
  abrtd.service loaded active running ABRT Automated Bug Reporting Tool 
 
 
  accounts-daemon.service loaded active running Accounts Service 
 
 
  atd.service loaded active running Job spooling tools 
 
 
  [output truncated] 
 
 
  這個例子中顯示,abrtd服務已經裝載,啟用,且正在執行,沒有對應的任務。 
 
 
  7.2.2 執行服務 
 
  
 
 
  systemctl start service_name.service 
 
 
  這個命令將立即啟動對應的服務。 
 
 
  例子7.5 啟動httpd服務 
 
 
  ~]# systemctl start httpd.service 
 
 
  7.2.3 關閉服務 
 
 
  systemctl stop service_name.service 
 
 
  例子7.6 關閉telnet服務 
 
 
  ~]# systemctl stop telnet.service 
 
 
  7.2.4 重啟服務 
 
 
  systemctl restart service_name.service 
 
 
  例子7.7 重啟sshd服務 
 
 
  讓/etc/ssh/sshd_config的配置生效,需要重啟sshd服務: 
 
 
  ~]# systemctl restart sshd.service 
 
 
  7.3 其它資訊