1. 程式人生 > >10.23 linux任務計劃cron10.24chkconfig工具10.25 systemd管理服務10.26 unit介紹 10.27 target介紹

10.23 linux任務計劃cron10.24chkconfig工具10.25 systemd管理服務10.26 unit介紹 10.27 target介紹

10.23 linux任務計劃cron10.24chkconfig工具10.25 systemd管理服務10.26 unit介紹 10.27 target介紹

- 10.23 linux任務計劃cron
- 10.24 chkconfig工具
- 10.25 systemd管理服務
- 10.26 unit介紹
- 10.27 target介紹

- 擴展
1. anacron http://blog.csdn.net/strikers1982/article/details/4787226 

2. xinetd服(默認機器沒有安裝這個服務,需要yum install xinetd安裝) http://blog.sina.com.cn/s/blog_465bbe6b010000vi.html 

3. systemd自定義啟動腳本 http://www.jb51.net/article/100457.htm 





# 10.23 Linux 任務計劃cron

-任務計劃的配置文件 /etc/crontab
```
[[email protected] ~]# cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root

# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name  command to be executed

[[email protected] ~]# 
```

-crontab -u、-e、-l、-r
-格式:分 時 日 月 周 user command
-文件/var/spool/cron/usemame
-分範圍0-59,時範圍0-23,日範圍0-31,月範圍0-12,周1-6
-可用格式1-5表示一個範圍1到5
-可用格式1,2,3表示1或者2或者3
-可用格式*/2表示被2整除的數字,比如小時,那就是每隔2小時
-要保證服務啟動狀態
-systemctl strat crond.service

-在root下定義一個用戶計劃crontab -e,這樣就進入到了crontab配置文件中,用法和vim一樣,按i進入編輯模式
```
[[email protected] ~]# crontab -e
no crontab for root - using an empty one
0 3 1-10 */2 2,5  /bin/bash /usr/local/sbin/123.sh >>/tmp/123.log 2>>/tmp/123.log
大概的格式就是這樣
"/tmp/crontab.rWAsXu" 0L, 0C
```


-啟動服務systemctl start crond,有了這個進程  /usr/sbin/crond 就說明啟動了
```
[[email protected] ~]# systemctl start crond
[[email protected] ~]# ps aux |grep cron
root        492  0.0  0.1 126220  1612 ?        Ss   21:22   0:00 /usr/sbin/crond -n
root       2594  0.0  0.0 112664   972 pts/0    S+   22:08   0:00 grep --color=auto cron
[[email protected] ~]# 
```
-還可以使用systmctl status crond 查看 ,Active: active (running)表示它已經啟動了
```
[[email protected] ~]# systemctl status crond
● crond.service - Command Scheduler
   Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled)
   Active: active (running) since 日 2017-09-10 21:22:17 CST; 47min ago
 Main PID: 492 (crond)
   CGroup: /system.slice/crond.service
           └─492 /usr/sbin/crond -n

9月 10 21:22:17 aminglinux-001 systemd[1]: Started Command Scheduler.
9月 10 21:22:17 aminglinux-001 systemd[1]: Starting Command Scheduler...
9月 10 21:22:17 aminglinux-001 crond[492]: (CRON) INFO (RANDOM_DELAY will be scaled wi....)
9月 10 21:22:17 aminglinux-001 crond[492]: (CRON) INFO (running with inotify support)
Hint: Some lines were ellipsized, use -l to show in full.
[[email protected] ~]# 

```

-現在把它停掉 再看下它的狀態 Active: inactive (dead) 表示已經停止了
```
[[email protected] ~]# systemctl stop crond
[[email protected] ~]# systemctl status crond
● crond.service - Command Scheduler
   Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled)
   Active: inactive (dead) since 日 2017-09-10 22:12:11 CST; 9s ago
  Process: 492 ExecStart=/usr/sbin/crond -n $CRONDARGS (code=exited, status=0/SUCCESS)
 Main PID: 492 (code=exited, status=0/SUCCESS)

9月 10 21:22:17 aminglinux-001 systemd[1]: Started Command Scheduler.
9月 10 21:22:17 aminglinux-001 systemd[1]: Starting Command Scheduler...
9月 10 21:22:17 aminglinux-001 crond[492]: (CRON) INFO (RANDOM_DELAY will be scaled wi....)
9月 10 21:22:17 aminglinux-001 crond[492]: (CRON) INFO (running with inotify support)
9月 10 22:12:11 aminglinux-001 systemd[1]: Stopping Command Scheduler...
9月 10 22:12:11 aminglinux-001 systemd[1]: Stopped Command Scheduler.
Hint: Some lines were ellipsized, use -l to show in full.
[[email protected] ~]# 
```

-[[email protected] ~]# systemctl start crond
-有時候任務計劃,寫了一個計劃 放到配置文件裏,但是就是沒執行,據老師的經驗,可能腳本裏僅僅是用了一個命令,而沒有用絕對路徑,

- 要麽把命令寫絕對路徑,要麽把命令的路徑加到變量裏面來,最好的辦法就是寫絕對路徑
- 建議大家,每次寫一個任務計劃都要追加一個 文件,日誌文件,不管錯誤還是正確 都有據可查



-任務計劃怎麽去備份呢
```
[[email protected] ~]# crontab -l
no crontab for root
[[email protected] ~]# 
```

-先crontab -e 隨便寫一個任務計劃
```
[[email protected] ~]# crontab -e
no crontab for root - using an empty one

1 10 * 2 * /usr/bin/find /tmp/ -type f -mtime +100 |xargs rm -f
~                                                                                           
                                                                                         
~                                                                                           
~                                                                                           
:wq
```
-加完了任務計劃之後 查看一下 conrtab -l 可以看出來
```
[[email protected] ~]# crontab -l
1 10 * 2 * /usr/bin/find /tmp/ -type f -mtime +100 |xargs rm -f
[[email protected] ~]# 
```
-將以用戶的名字命名一個文件,這個文件內容就是你的計劃任務列表,如果備份的話就是把這個目錄文件拷貝一份就可以
```
[[email protected] ~]# cat /var/spool/cron/root
1 10 * 2 * /usr/bin/find /tmp/ -type f -mtime +100 |xargs rm -f
[[email protected] ~]# 
```

-crontab -e 編輯
-crontab -l 查看
-crontab -r 刪除

```
[[email protected] ~]# crontab -r
[[email protected] ~]# crontab -l
no crontab for root
[[email protected] ~]# 
```
-crontab -u root -l 指定一個用戶
```
[[email protected] ~]# crontab -u root -l
no crontab for root
[[email protected] ~]# 
```








# 10.24 chkconfig 工具
-linux系統服務管理
-chkconfig --list
-命令解釋:當前系統下使用chkconfig的服務都有哪些
```
[[email protected] ~]# chkconfig --list

註意:該輸出結果只顯示 SysV 服務,並不包含原生 systemd 服務。SysV 配置數據可能被原生 systemd 配置覆蓋。 
      如果您想列出 systemd 服務,請執行 ‘systemctl list-unit-files‘。
      欲查看對特定 target 啟用的服務請執行
      ‘systemctl list-dependencies [target]‘。

netconsole     	0:關	1:關	2:關	3:關	4:關	5:關	6:關
network        	0:關	1:關	2:開	3:開	4:開	5:開	6:關
[[email protected] ~]# 
```
-一個netconsole,另一個是network,6版本之前的使用的管理機制是sysV ,7版本的用的管理機制叫 systemd,

-這個服務在這個配置文件下/etc/init.d/
```
[[email protected] ~]# ls /etc/init.d/
functions  netconsole  network  README
[[email protected] ~]# 
```
-chkconfig network off 把network服務都關了
```
[[email protected] ~]# chkconfig network off
[[email protected] ~]# chkconfig --list

註意:該輸出結果只顯示 SysV 服務,並不包含原生 systemd 服務。SysV 配置數據可能被原生 systemd 配置覆蓋。 
      如果您想列出 systemd 服務,請執行 ‘systemctl list-unit-files‘。
      欲查看對特定 target 啟用的服務請執行
      ‘systemctl list-dependencies [target]‘。

netconsole     	0:關	1:關	2:關	3:關	4:關	5:關	6:關
network        	0:關	1:關	2:關	3:關	4:關	5:關	6:關
[[email protected] ~]# 
```
-chkconfig network on 再把network服務打開
```
[[email protected] ~]# chkconfig network on
[[email protected] ~]# chkconfig --list

註意:該輸出結果只顯示 SysV 服務,並不包含原生 systemd 服務。SysV 配置數據可能被原生 systemd 配置覆蓋。 
      如果您想列出 systemd 服務,請執行 ‘systemctl list-unit-files‘。
      欲查看對特定 target 啟用的服務請執行
      ‘systemctl list-dependencies [target]‘。

netconsole     	0:關	1:關	2:關	3:關	4:關	5:關	6:關
network        	0:關	1:關	2:開	3:開	4:開	5:開	6:關
[[email protected] ~]# 
```
- network        	0:關 (關機狀態)	1:關(單用戶)	2:開 	3:開	4:開	5:開	6:關(重啟)
- 在CentOS 6   0級別是關機,1級別是單用戶,2 比 3 少了一個NFS服務,4級別是一個保留的級別,5級別同樣的是多用戶,帶圖形,6級別是重啟



-指定某一個級別是開啟還是關閉
-chkconfig --level 3 network off 把3級別的network 服務關了
```
[[email protected] ~]# chkconfig --list

註意:該輸出結果只顯示 SysV 服務,並不包含原生 systemd 服務。SysV 配置數據可能被原生 systemd 配置覆蓋。 
      如果您想列出 systemd 服務,請執行 ‘systemctl list-unit-files‘。
      欲查看對特定 target 啟用的服務請執行
      ‘systemctl list-dependencies [target]‘。

netconsole     	0:關	1:關	2:關	3:關	4:關	5:關	6:關
network        	0:關	1:關	2:開	3:開	4:開	5:開	6:關
[[email protected] ~]# chkconfig --level 3 network off
[[email protected] ~]# chkconfig --list

註意:該輸出結果只顯示 SysV 服務,並不包含原生 systemd 服務。SysV 配置數據可能被原生 systemd 配置覆蓋。 
      如果您想列出 systemd 服務,請執行 ‘systemctl list-unit-files‘。
      欲查看對特定 target 啟用的服務請執行
      ‘systemctl list-dependencies [target]‘。

netconsole     	0:關	1:關	2:關	3:關	4:關	5:關	6:關
network        	0:關	1:關	2:開	3:關	4:開	5:開	6:關
[[email protected] ~]# 
```



-chkconfig --level 345 network off  把3、4、5級別關了network服務
```
[[email protected] ~]# chkconfig --level 345 network off
[[email protected] ~]# chkconfig --list

註意:該輸出結果只顯示 SysV 服務,並不包含原生 systemd 服務。SysV 配置數據可能被原生 systemd 配置覆蓋。 
      如果您想列出 systemd 服務,請執行 ‘systemctl list-unit-files‘。
      欲查看對特定 target 啟用的服務請執行
      ‘systemctl list-dependencies [target]‘。

netconsole     	0:關	1:關	2:關	3:關	4:關	5:關	6:關
network        	0:關	1:關	2:開	3:關	4:關	5:關	6:關
[[email protected] ~]# 
```
-可以把一個腳本加入到一個服務列表裏面來 -chkconfig --add network
```
[[email protected] ~]# cd /etc/init.d
[[email protected] init.d]# ls
functions  netconsole  network  README
[[email protected] init.d]# cp network 123
[[email protected] init.d]# ls -l
總用量 40
-rwxr-xr-x  1 root root  6643 9月  11 20:49 123
-rw-r--r--. 1 root root 15131 9月  12 2016 functions
-rwxr-xr-x. 1 root root  2989 9月  12 2016 netconsole
-rwxr-xr-x. 1 root root  6643 9月  12 2016 network
-rw-r--r--. 1 root root  1160 11月  7 2016 README
[[email protected] init.d]# chkconfig --list

註意:該輸出結果只顯示 SysV 服務,並不包含原生 systemd 服務。SysV 配置數據可能被原生 systemd 配置覆蓋。 
      如果您想列出 systemd 服務,請執行 ‘systemctl list-unit-files‘。
      欲查看對特定 target 啟用的服務請執行
      ‘systemctl list-dependencies [target]‘。

netconsole     	0:關	1:關	2:關	3:關	4:關	5:關	6:關
network        	0:關	1:關	2:開	3:關	4:關	5:關	6:關
[[email protected] init.d]# chkconfig --add 123
[[email protected] init.d]# chkconfig --list

註意:該輸出結果只顯示 SysV 服務,並不包含原生 systemd 服務。SysV 配置數據可能被原生 systemd 配置覆蓋。 
      如果您想列出 systemd 服務,請執行 ‘systemctl list-unit-files‘。
      欲查看對特定 target 啟用的服務請執行
      ‘systemctl list-dependencies [target]‘。

123            	0:關	1:關	2:開	3:開	4:開	5:開	6:關
netconsole     	0:關	1:關	2:關	3:關	4:關	5:關	6:關
network        	0:關	1:關	2:開	3:關	4:關	5:關	6:關
[[email protected] init.d]# 
```
-用vim 打開123 看下
```
[[email protected] init.d]# vim 123

#! /bin/bash
#
# network       Bring up/down networking
#
# chkconfig: 2345 10 90
# description: Activates/Deactivates all network interfaces configured to #              start at boot time.
#
### BEGIN INIT INFO
# Provides: $network
# Should-Start: iptables ip6tables NetworkManager-wait-online NetworkManager $network-pre
# Short-Description: Bring up/down networking
# Description: Bring up/down networking
### END INIT INFO

# Source function library.
. /etc/init.d/functions

if [ ! -f /etc/sysconfig/network ]; then
    exit 6
fi
"123" 254L, 6643C     
```

-同樣也可以刪除自定義服務 chkconfig --del network
```
[[email protected] init.d]# chkconfig --list

註意:該輸出結果只顯示 SysV 服務,並不包含原生 systemd 服務。SysV 配置數據可能被原生 systemd 配置覆蓋。 
      如果您想列出 systemd 服務,請執行 ‘systemctl list-unit-files‘。
      欲查看對特定 target 啟用的服務請執行
      ‘systemctl list-dependencies [target]‘。

123            	0:關	1:關	2:開	3:開	4:開	5:開	6:關
netconsole     	0:關	1:關	2:關	3:關	4:關	5:關	6:關
network        	0:關	1:關	2:開	3:關	4:關	5:關	6:關
[[email protected] init.d]# vim 123
[[email protected] init.d]# chkconfig --del 123
[[email protected] init.d]# chkconfig --list

註意:該輸出結果只顯示 SysV 服務,並不包含原生 systemd 服務。SysV 配置數據可能被原生 systemd 配置覆蓋。 
      如果您想列出 systemd 服務,請執行 ‘systemctl list-unit-files‘。
      欲查看對特定 target 啟用的服務請執行
      ‘systemctl list-dependencies [target]‘。

netconsole     	0:關	1:關	2:關	3:關	4:關	5:關	6:關
network        	0:關	1:關	2:開	3:關	4:關	5:關	6:關
[[email protected] init.d]# 
```





# 10.25 systemd管理服務

- 在centos 6之前包括 6 我們可以用chkconfig這個工具管理系統的服務,在centos 7裏也可以使用,但是會提示,目前已經使用systemd 服務


-在centos7裏面會提示使用命令systemctl list-unit-files 來查看所有的服務,這個包含了很多東西,不僅有service,還有target,socket
```
[[email protected] init.d]# systemctl list-unit-files
UNIT FILE                                   STATE   
UNIT FILE                                   STATE   
proc-sys-fs-binfmt_misc.automount           static  
dev-hugepages.mount                         static  
UNIT FILE                                   STATE   
proc-sys-fs-binfmt_misc.automount           static  
dev-hugepages.mount                         static  
dev-mqueue.mount                            static  
proc-sys-fs-binfmt_misc.mount               static  
sys-fs-fuse-connections.mount               static  
sys-kernel-config.mount                     static  
sys-kernel-debug.mount                      static  
tmp.mount                                   disabled
brandbot.path                               disabled
systemd-ask-password-console.path           static  
systemd-ask-password-plymouth.path          static  
systemd-ask-password-wall.path              static  
session-1.scope                             static  
session-2.scope                             static  
arp-ethers.service                          disabled
auditd.service                              enabled 
[email protected]                             enabled 
blk-availability.service                    disabled
brandbot.service                            static  
[email protected]                      static  
chrony-wait.service                         disabled
lines 1-22
```

-下面先來看看幾個和systemd服務相關的命令
-使用命令systemctl list-units --all --type=service  指定類型為service服務的,列出來所有的都是service,還有其他信息,包括描述信息,是否是running active loaded
```
[[email protected] init.d]# systemctl list-units --all --type=service
  UNIT                       LOAD      ACTIVE   SUB     DESCRIPTION
  auditd.service             loaded    active   running Security Auditing Servi
  brandbot.service           loaded    inactive dead    Flexible Branding Servi
  chronyd.service            loaded    active   running NTP client/server
  cpupower.service           loaded    inactive dead    Configure CPU power rel
  crond.service              loaded    active   running Command Scheduler
  dbus.service               loaded    active   running D-Bus System Message Bu
● display-manager.service    not-found inactive dead    display-manager.service
  dm-event.service           loaded    inactive dead    Device-mapper event dae
  dracut-shutdown.service    loaded    inactive dead    Restore /run/initramfs
  ebtables.service           loaded    inactive dead    Ethernet Bridge Filteri
  emergency.service          loaded    inactive dead    Emergency Shell
● exim.service               not-found inactive dead    exim.service
  firewalld.service          loaded    active   running firewalld - dynamic fir
  [email protected]         loaded    active   running Getty on tty1
  ip6tables.service          loaded    inactive dead    IPv6 firewall with ip6t
● ipset.service              not-found inactive dead    ipset.service
  iptables.service           loaded    inactive dead    IPv4 firewall with ipta
  irqbalance.service         loaded    inactive dead    irqbalance daemon
● kdump.service              loaded    failed   failed  Crash recovery kernel a
  kmod-static-nodes.service  loaded    active   exited  Create list of required
● libvirtd.service           not-found inactive dead    libvirtd.service
lines 1-22


LOAD   = Reflects whether the unit definition was properly loaded.
ACTIVE = The high-level unit activation state, i.e. generalization of SUB.
SUB    = The low-level unit activation state, values depend on unit type.

92 loaded units listed.
To show all installed unit files use ‘systemctl list-unit-files‘.
lines 73-100/100 (END)
```


-幾個常用的和服務相關的命令
-systemctl enable crond.service  讓服務開機啟動
-sysemctl disable crond          不讓服務開機啟動
```
[[email protected] init.d]# systemctl enable crond.service
[[email protected] init.d]# systemctl disable crond
Removed symlink /etc/systemd/system/multi-user.target.wants/crond.service.
```


-systemctl status crond          查看狀態
```
[[email protected] init.d]# systemctl enable crond.service
Created symlink from /etc/systemd/system/multi-user.target.wants/crond.service to /usr/lib/systemd/system/crond.service.
[[email protected] init.d]# systemctl status crond
● crond.service - Command Scheduler
   Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled)
   Active: active (running) since 一 2017-09-11 20:21:06 CST; 2h 27min ago
 Main PID: 496 (crond)
   CGroup: /system.slice/crond.service
           └─496 /usr/sbin/crond -n

9月 11 20:21:06 aminglinux-001 systemd[1]: Started Command Scheduler.
9月 11 20:21:06 aminglinux-001 systemd[1]: Starting Command Scheduler...
9月 11 20:21:06 aminglinux-001 crond[496]: (CRON) INFO (RANDOM_DELAY will ...)
9月 11 20:21:06 aminglinux-001 crond[496]: (CRON) INFO (running with inoti...)
Hint: Some lines were ellipsized, use -l to show in full.
[[email protected] init.d]# 
```

-systemctl stop  crond           停止服務
-systemctl start  crond          啟動服務
-systemctl restart  crond        重啟服務
-systemctl is enabled crond      檢查服務是否開機啟動
```
[[email protected] init.d]# systemctl enable crond.service
Created symlink from /etc/systemd/system/multi-user.target.wants/crond.service to /usr/lib/systemd/system/crond.service.

[[email protected] init.d]# systemctl is-enabled crond
enabled
[[email protected] init.d]# 

[[email protected] init.d]# systemctl disable crond
Removed symlink /etc/systemd/system/multi-user.target.wants/crond.service.
[[email protected] init.d]# systemctl is-enabled crond
disabled
[[email protected] init.d]# 
```
- 從這裏可以獲得service的配置文件內容
```
[[email protected] init.d]# systemctl enable crond.service
Created symlink from /etc/systemd/system/multi-user.target.wants/crond.service to /usr/lib/systemd/system/crond.service.
[[email protected] init.d]# 
```
- 可以看下這個文件內容
```

[[email protected] init.d]# cat /etc/systemd/system/multi-user.target.wants/crond.service
[Unit]
Description=Command Scheduler
After=auditd.service systemd-user-sessions.service time-sync.target

[Service]
EnvironmentFile=/etc/sysconfig/crond
ExecStart=/usr/sbin/crond -n $CRONDARGS
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process

[Install]
WantedBy=multi-user.target

[[email protected] init.d]# 
[[email protected] init.d]# ls -l /etc/systemd/system/multi-user.target.wants/crond.service
lrwxrwxrwx 1 root root 37 9月  11 22:55 /etc/systemd/system/multi-user.target.wants/crond.service -> /usr/lib/systemd/system/crond.service
[[email protected] init.d]# 

```
-它實際上是一個軟鏈接,軟鏈接到了/usr/lib/systemd/system/crond.service 這裏,如果改成disable,那個軟鏈接文件就被挪走了
```
[[email protected] init.d]# systemctl disable crond
Removed symlink /etc/systemd/system/multi-user.target.wants/crond.service.
[[email protected] init.d]# ls -l /etc/systemd/system/multi-user.target.wants/crond.service
ls: 無法訪問/etc/systemd/system/multi-user.target.wants/crond.service: 沒有那個文件或目錄
[[email protected] init.d]# 
```










# 10.26 unit介紹
-通過enable disable大概的了解了,如果是enable 就會創建一個軟鏈接,軟鏈接目錄所在的源目錄是這個目錄/usr/lib/systemd/system/,這個目錄下面都有上面東西呢,可以來看下,
```
[[email protected] init.d]# ls /usr/lib/systemd/system
arp-ethers.service                      remote-fs.target
auditd.service                          rescue.service
[email protected]                         rescue.target
basic.target                            rescue.target.wants
basic.target.wants                      rhel-autorelabel-mark.service
blk-availability.service                rhel-autorelabel.service
bluetooth.target                        rhel-configure.service
brandbot.path                           rhel-dmesg.service
brandbot.service                        rhel-domainname.service
[email protected]                  rhel-import-state.service
[email protected]    
```
-這裏很多文件,只列取了一部分,service. .target .timer 很多類型,這些都叫unit
-主要分成這幾種類型
-service 系統服務
-target 多個unit組成的組
```
[[email protected] system]# ls -l runlevel*
lrwxrwxrwx. 1 root root 15 7月  17 04:29 runlevel0.target -> poweroff.target      關機
lrwxrwxrwx. 1 root root 13 7月  17 04:29 runlevel1.target -> rescue.target        救援模式
lrwxrwxrwx. 1 root root 17 7月  17 04:29 runlevel2.target -> multi-user.target    多用戶模式
lrwxrwxrwx. 1 root root 17 7月  17 04:29 runlevel3.target -> multi-user.target     
lrwxrwxrwx. 1 root root 17 7月  17 04:29 runlevel4.target -> multi-user.target
lrwxrwxrwx. 1 root root 16 7月  17 04:29 runlevel5.target -> graphical.target     圖形化界面
lrwxrwxrwx. 1 root root 13 7月  17 04:29 runlevel6.target -> reboot.target        重啟

runlevel1.target.wants:
總用量 0
lrwxrwxrwx. 1 root root 39 7月  17 04:29 systemd-update-utmp-runlevel.service -> ../systemd-update-utmp-runlevel.service

runlevel2.target.wants:
總用量 0
lrwxrwxrwx. 1 root root 39 7月  17 04:29 systemd-update-utmp-runlevel.service -> ../systemd-update-utmp-runlevel.service

runlevel3.target.wants:
總用量 0
lrwxrwxrwx. 1 root root 39 7月  17 04:29 systemd-update-utmp-runlevel.service -> ../systemd-update-utmp-runlevel.service

runlevel4.target.wants:
總用量 0
lrwxrwxrwx. 1 root root 39 7月  17 04:29 systemd-update-utmp-runlevel.service -> ../systemd-update-utmp-runlevel.service

runlevel5.target.wants:
總用量 0
lrwxrwxrwx. 1 root root 39 7月  17 04:29 systemd-update-utmp-runlevel.service -> ../systemd-update-utmp-runlevel.service
[[email protected] system]# 
```
- [ ] unit裏面有一種類型,target,實際上就是多個service 多個unit組成的一個組,形成的一個target
-device 硬件設備
-mount 文件系統掛載點
-automount 自動掛載點
-path 文件或路徑
-scope 不是由systemd啟動的外部進程
-slice 進程組
-snapshot systemd 快照
-socket 進程間通信套接字
-sawp swap 文件
-timer 定時器


-unit相關的命令
-systemctl list units列出正在運行的unit
```
[[email protected] system]# systemctl list-units
  UNIT                       LOAD   ACTIVE SUB       DESCRIPTION
  proc-sys-fs-binfmt_misc.automount loaded active waiting   Arbitrary Executabl
  sys-devices-pci0000:00-0000:00:07.1-ata2-host2-target2:0:0-2:0:0:0-block-sr0.
  sys-devices-pci0000:00-0000:00:10.0-host0-target0:0:0-0:0:0:0-block-sda-sda1.
  sys-devices-pci0000:00-0000:00:10.0-host0-target0:0:0-0:0:0:0-block-sda-sda2.
  sys-devices-pci0000:00-0000:00:10.0-host0-target0:0:0-0:0:0:0-block-sda-sda3.
  sys-devices-pci0000:00-0000:00:10.0-host0-target0:0:0-0:0:0:0-block-sda.devic
  sys-devices-pci0000:00-0000:00:10.0-host0-target0:0:1-0:0:1:0-block-sdb-sdb1.
  sys-devices-pci0000:00-0000:00:10.0-host0-target0:0:1-0:0:1:0-block-sdb-sdb2.
  sys-devices-pci0000:00-0000:00:10.0-host0-target0:0:1-0:0:1:0-block-sdb-sdb3.
  sys-devices-pci0000:00-0000:00:10.0-host0-target0:0:1-0:0:1:0-block-sdb.devic
  sys-devices-pci0000:00-0000:00:11.0-0000:02:01.0-net-ens33.device loaded acti
  sys-devices-pci0000:00-0000:00:11.0-0000:02:02.0-sound-card0.device loaded ac
  sys-devices-pci0000:00-0000:00:11.0-0000:02:05.0-net-ens37.device loaded acti
  sys-devices-platform-serial8250-tty-ttyS1.device loaded active plugged   /sys
  sys-devices-platform-serial8250-tty-ttyS2.device loaded active plugged   /sys
  sys-devices-platform-serial8250-tty-ttyS3.device loaded active plugged   /sys
  sys-devices-pnp0-00:05-tty-ttyS0.device loaded active plugged   /sys/devices/
  sys-devices-virtual-block-dm\x2d0.device loaded active plugged   /sys/devices
  sys-module-configfs.device loaded active plugged   /sys/module/configfs
  sys-subsystem-net-devices-ens33.device loaded active plugged   82545EM Gigabi
  sys-subsystem-net-devices-ens37.device loaded active plugged   82545EM Gigabi
  -.mount                    loaded active mounted   /
  boot.mount                 loaded active mounted   /boot
  dev-hugepages.mount        loaded active mounted   Huge Pages File System
  dev-mqueue.mount           loaded active mounted   POSIX Message Queue File S
  run-user-0.mount           loaded active mounted   /run/user/0
lines 1-27
```

- systemctl list-units --all列出所有,包括失敗的或者inactive的unit
```

[[email protected] system]# systemctl list-units --all
  UNIT                      LOAD      ACTIVE   SUB       DESCRIPTION
  proc-sys-fs-binfmt_misc.automount loaded    active   waiting   Arbitrary Exec
  dev-block-8:17.device     loaded    active   plugged   LVM PV xyK6vx-3HQZ-sto
  dev-block-8:18.device     loaded    active   plugged   LVM PV HYu2w5-CNfo-RUj
  dev-block-8:19.device     loaded    active   plugged   LVM PV LXcUeS-f5N5-SSM
  dev-cdrom.device          loaded    active   plugged   VMware_Virtual_IDE_CDR
  dev-disk-by\x2did-ata\x2dVMware_Virtual_IDE_CDROM_Drive_10000000000000000001.
  dev-disk-by\x2did-dm\x2dname\x2dvg1\x2dlv1.device loaded    active   plugged 
  dev-disk-by\x2did-dm\x2duuid\x2dLVM\x2ddrz04oPSnwDByRIsSdtvDt25BrMdjVp53fQjCJ
  dev-disk-by\x2did-lvm\x2dpv\x2duuid\x2dHYu2w5\x2dCNfo\x2dRUjA\x2dkeHq\x2doUmd
  dev-disk-by\x2did-lvm\x2dpv\x2duuid\x2dLXcUeS\x2df5N5\x2dSSM3\x2dUINM\x2ddcYk
  dev-disk-by\x2did-lvm\x2dpv\x2duuid\x2dxyK6vx\x2d3HQZ\x2dstol\x2dpCOH\x2d1NbT
  dev-disk-by\x2dlabel-CentOS\x5cx207\x5cx20x86_64.device loaded    active   pl
  dev-disk-by\x2dpath-pci\x2d0000:00:07.1\x2data\x2d2.0.device loaded    active
  dev-disk-by\x2dpath-pci\x2d0000:00:10.0\x2dscsi\x2d0:0:0:0.device loaded    a
  dev-disk-by\x2dpath-pci\x2d0000:00:10.0\x2dscsi\x2d0:0:0:0\x2dpart1.device lo
  dev-disk-by\x2dpath-pci\x2d0000:00:10.0\x2dscsi\x2d0:0:0:0\x2dpart2.device lo
  dev-disk-by\x2dpath-pci\x2d0000:00:10.0\x2dscsi\x2d0:0:0:0\x2dpart3.device lo
  dev-disk-by\x2dpath-pci\x2d0000:00:10.0\x2dscsi\x2d0:0:1:0.device loaded    a
  dev-disk-by\x2dpath-pci\x2d0000:00:10.0\x2dscsi\x2d0:0:1:0\x2dpart1.device lo
  dev-disk-by\x2dpath-pci\x2d0000:00:10.0\x2dscsi\x2d0:0:1:0\x2dpart2.device lo
  dev-disk-by\x2dpath-pci\x2d0000:00:10.0\x2dscsi\x2d0:0:1:0\x2dpart3.device lo
  dev-disk-by\x2duuid-2016\x2d12\x2d05\x2d13\x2d55\x2d45\x2d00.device loaded   
  dev-disk-by\x2duuid-2bb1bac0\x2dd949\x2d4a35\x2dab9d\x2d4cf97f48c94a.device l
  dev-disk-by\x2duuid-a6506adf\x2d10f7\x2d49e5\x2dbe5b\x2d144453695c62.device l
  dev-disk-by\x2duuid-af686d36\x2d72dc\x2d4c1d\x2da150\x2dff8b83f84d1a.device l
  dev-disk-by\x2duuid-f8d5787a\x2d51e0\x2d407a\x2d8000\x2dfe0385f685eb.device l
lines 1-27
```
-systemctl list-units --all --state=inactive 列出inactive的unit
```
[[email protected] system]# systemctl list-units --all --state=inactive
  UNIT                        LOAD      ACTIVE   SUB  DESCRIPTION
  proc-sys-fs-binfmt_misc.mount loaded    inactive dead Arbitrary Executable Fi
  sys-fs-fuse-connections.mount loaded    inactive dead FUSE Control File Syste
  tmp.mount                   loaded    inactive dead Temporary Directory
  systemd-ask-password-console.path loaded    inactive dead Dispatch Password R
  brandbot.service            loaded    inactive dead Flexible Branding Service
  cpupower.service            loaded    inactive dead Configure CPU power relat
● display-manager.service     not-found inactive dead display-manager.service
  dm-event.service            loaded    inactive dead Device-mapper event daemo
  dracut-shutdown.service     loaded    inactive dead Restore /run/initramfs
  ebtables.service            loaded    inactive dead Ethernet Bridge Filtering
  emergency.service           loaded    inactive dead Emergency Shell
● exim.service                not-found inactive dead exim.service
  ip6tables.service           loaded    inactive dead IPv6 firewall with ip6tab
● ipset.service               not-found inactive dead ipset.service
  iptables.service            loaded    inactive dead IPv4 firewall with iptabl
  irqbalance.service          loaded    inactive dead irqbalance daemon
● libvirtd.service            not-found inactive dead libvirtd.service
● lvm2-activation.service     not-found inactive dead lvm2-activation.service
  lvm2-lvmpolld.service       loaded    inactive dead LVM2 poll daemon
  microcode.service           loaded    inactive dead Load CPU microcode update
● ntpd.service                not-found inactive dead ntpd.service
● ntpdate.service             not-found inactive dead ntpdate.service
  plymouth-quit-wait.service  loaded    inactive dead Wait for Plymouth Boot Sc
  plymouth-quit.service       loaded    inactive dead Terminate Plymouth Boot S
  plymouth-read-write.service loaded    inactive dead Tell Plymouth To Write Ou
  plymouth-start.service      loaded    inactive dead Show Plymouth Boot Screen
lines 1-27

```

-systemctl list-units --type=service 列出狀態為active的service
```
[[email protected] system]# systemctl list-units --type=service
  UNIT                        LOAD   ACTIVE SUB     DESCRIPTION
  auditd.service              loaded active running Security Auditing Service
  chronyd.service             loaded active running NTP client/server
  crond.service               loaded active running Command Scheduler
  dbus.service                loaded active running D-Bus System Message Bus
  firewalld.service           loaded active running firewalld - dynamic firewal
  [email protected]          loaded active running Getty on tty1
● kdump.service               loaded failed failed  Crash recovery kernel armin
  kmod-static-nodes.service   loaded active exited  Create list of required sta
  lvm2-lvmetad.service        loaded active running LVM2 metadata daemon
  lvm2-monitor.service        loaded active exited  Monitoring of LVM2 mirrors,
  [email protected]:17.service    loaded active exited  LVM2 PV scan on device 8:17
  [email protected]:18.service    loaded active exited  LVM2 PV scan on device 8:18
  [email protected]:19.service    loaded active exited  LVM2 PV scan on device 8:19
  network.service             loaded active exited  LSB: Bring up/down networki
● NetworkManager-wait-online.service loaded failed failed  Network Manager Wait
  NetworkManager.service      loaded active running Network Manager
  polkit.service              loaded active running Authorization Manager
  postfix.service             loaded active running Postfix Mail Transport Agen
  rhel-dmesg.service          loaded active exited  Dump dmesg to /var/log/dmes
  rhel-import-state.service   loaded active exited  Import network configuratio
  rhel-readonly.service       loaded active exited  Configure read-only root su
  rsyslog.service             loaded active running System Logging Service
  sshd.service                loaded active running OpenSSH server daemon
  sysstat.service             loaded active exited  Resets System Activity Logs
  systemd-journal-flush.service loaded active exited  Flush Journal to Persiste
  systemd-journald.service    loaded active running Journal Service
lines 1-27
```


- systemctl is-active crond.service 查看某個服務是否為active
- systemctl is-enabled crond.service 查看某個服務是否為enabled
```
[[email protected] system]# systemctl is-active crond.service
active
[[email protected] system]# systemctl is-enabled crond.service
disabled
[[email protected] system]# systemctl enable crond
Created symlink from /etc/systemd/system/multi-user.target.wants/crond.service to /usr/lib/systemd/system/crond.service.
[[email protected] system]# systemctl is-enabled crond.service
enabled
[[email protected] system]# 
```







# 10.27 target介紹
-linux系統服務管理-systemd
-系統為了方便管理用target來管理unit
-systemctl list-unit-files --type=target 可以列出所有的tartget
```
[[email protected] ~]# systemctl list-unit-files --type=target
UNIT FILE                 STATE   
basic.target              static  
bluetooth.target          static  
cryptsetup-pre.target     static  
cryptsetup.target         static  
ctrl-alt-del.target       disabled
default.target            enabled 
emergency.target          static  
final.target              static  
getty.target              static  
graphical.target          static  
halt.target               disabled
hibernate.target          static  
hybrid-sleep.target       static  
initrd-fs.target          static  
initrd-root-fs.target     static  
initrd-switch-root.target static  
initrd.target             static  
iprutils.target           disabled
kexec.target              disabled
local-fs-pre.target       static  
local-fs.target           static  
machines.target           disabled
multi-user.target         enabled 
network-online.target     static  
network-pre.target        static  
network.target            static  
lines 1-27
```

-systemctl list-dependencies multi-user.target 查看指定的target下面有哪些unit
```
[[email protected] ~]# systemctl list-dependencies multi-user.target
multi-user.target
● ├─auditd.service
● ├─brandbot.path
● ├─chronyd.service
● ├─crond.service
● ├─dbus.service
● ├─irqbalance.service
● ├─kdump.service
● ├─network.service
● ├─NetworkManager.service
● ├─plymouth-quit-wait.service
● ├─plymouth-quit.service
● ├─postfix.service
● ├─rsyslog.service
● ├─sshd.service
● ├─sysstat.service
● ├─systemd-ask-password-wall.path
● ├─systemd-logind.service
● ├─systemd-readahead-collect.service
● ├─systemd-readahead-replay.service
● ├─systemd-update-utmp-runlevel.service
● ├─systemd-user-sessions.service
● ├─tuned.service
● ├─vmtoolsd.service
● ├─basic.target
● │ ├─firewalld.service
● │ ├─microcode.service
lines 1-27

...
● │ │ ├─systemd-random-seed.service
● │ │ ├─systemd-sysctl.service
● │ │ ├─systemd-tmpfiles-setup-dev.service
● │ │ ├─systemd-tmpfiles-setup.service
● │ │ ├─systemd-udev-trigger.service
● │ │ ├─systemd-udevd.service
● │ │ ├─systemd-update-done.service
● │ │ ├─systemd-update-utmp.service
● │ │ ├─systemd-vconsole-setup.service
● │ │ ├─cryptsetup.target
● │ │ ├─local-fs.target
● │ │ │ ├─-.mount
● │ │ │ ├─boot.mount
● │ │ │ ├─rhel-import-state.service
● │ │ │ ├─rhel-readonly.service
● │ │ │ └─systemd-remount-fs.service
● │ │ └─swap.target
● │ │   └─dev-disk-by\x2duuid-f8d5787a\x2d51e0\x2d407a\x2d8000\x2dfe0385f685eb.
● │ └─timers.target
● │   └─systemd-tmpfiles-clean.timer
● ├─getty.target
● │ └─[email protected]
● └─remote-fs.target
lines 63-89/89 (END)

```
-查看系統默認的target,  systemctl get-default
```
[[email protected] ~]# systemctl get-default
multi-user.target
[[email protected] ~]# 
```
-設置一個默認的target
-systemctl set-default multi-user.target
```
[[email protected] ~]# systemctl set-default multi-user.target
Removed symlink /etc/systemd/system/default.target.
Created symlink from /etc/systemd/system/default.target to /usr/lib/systemd/system/multi-user.target.
[[email protected] ~]# 
```
-設置默認target的時候 它會創建一個軟鏈接/etc/systemd/system/default.target
```
[[email protected] ~]# ls /etc/systemd/system/default.target
/etc/systemd/system/default.target
[[email protected] ~]# ls -l !$
ls -l /etc/systemd/system/default.target
lrwxrwxrwx 1 root root 41 9月  12 22:16 /etc/systemd/system/default.target -> /usr/lib/systemd/system/multi-user.target
[[email protected] ~]# 
```

- [x] 一個service它屬於一種類型的unit,unit實際上包含很多種類型,其中一個類型就是service,一個service就是一種類型的 unit,  
- [x] 而多個unit組成一個target    
- [x] 一個target裏面包含多個service

-cat /usr/lib/systemd/system/sshd.service  看[install]部分  WantedBy=multi-user.target
```
[[email protected] ~]# cat /usr/lib/systemd/system/sshd.service
[Unit]
Description=OpenSSH server daemon
Documentation=man:sshd(8) man:sshd_config(5)
After=network.target sshd-keygen.service
Wants=sshd-keygen.service

[Service]
Type=forking
PIDFile=/var/run/sshd.pid
EnvironmentFile=/etc/sysconfig/sshd
ExecStart=/usr/sbin/sshd $OPTIONS
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
RestartSec=42s

[Install]
WantedBy=multi-user.target
[[email protected] ~]# 
```

- 看下/usr/lib/systemd/system/crond.service  同樣的也是屬於multi-user.target
```
[[email protected] ~]# cat /usr/lib/systemd/system/crond.service
[Unit]
Description=Command Scheduler
After=auditd.service systemd-user-sessions.service time-sync.target

[Service]
EnvironmentFile=/etc/sysconfig/crond
ExecStart=/usr/sbin/crond -n $CRONDARGS
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process

[Install]
WantedBy=multi-user.target

[[email protected] ~]# 

```
- [x] 系統有多種unit組成,這麽多的unit,為了方便管理,把他們歸類,歸類若幹個類,每組把它叫做一個tartget,也就是說target是由多種unit組成的,那service 它屬於unit ,屬於一種類型的unit ,一個target包含若幹個service,
- systemctl get-default 查看系統默認的target
- 也可以用systemctl set-default multi-user.target 設置一個默認的target






- 擴展
1. anacron http://blog.csdn.net/strikers1982/article/details/4787226 

anacron 是幹什麽的呢?
簡單說吧,crontab 可以指定任務在每天幾點鐘運行,可是如果那個鐘點機器沒有開,
那個任務便錯過了時間在一個新的時間輪回之內不再運行了。
而 anacron 可以在每天、每周、每月(時間輪回天數可以自己指定)服務啟動時便會
將所有服務置為 Ready 狀態,只等時間一到,便執行任務。
說得有點別扭,一起來從配置文件入手來分析 anacron 吧。



anacron 的執行方式。

這玩意兒遠看蠻簡單的,可是真操作起來就沒那麽輕松了。

anacron 是幹什麽的呢?簡單說吧,crontab 可以指定任務在每天幾點鐘運行,可是如果那個鐘點機器沒有開,那個任務便錯過了時間在一個新的時間輪回之內不再運行了。而 anacron 可以在每天、每周、每月(時間輪回天數可以自己指定)服務啟動時便會將所有服務置為 Ready 狀態,只等時間一到,便執行任務,說得有點別扭,一起來從配置文件入手來分析 anacron 吧。

# /etc/anacrontab: configuration file for anacron

# See anacron(8) and anacrontab(5) for details.

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

1       5       cron.daily              run-parts /etc/cron.daily
7       70      cron.weekly             run-parts /etc/cron.weekly
30      75      cron.monthly            run-parts /etc/cron.monthly

首先前兩行註釋,告訴你文件是做什麽用的,從 man 5 anacrontab 獲取配置文件幫助。

第5、6行是定義基本環境變量,保證程序可以正常運行。

最後三行是默認配置下所執行的任務,也是最重要的,任務配置部分。
分四部分:


period        delay            job-identifier        command
<輪回天數>    <輪回內的重試時間>    <任務描述>        <命令>
7           70              cron.weekly             run-parts /etc/cron.weekly

首先是輪回天數,即是指任務在多少天內執行一次,monthly 就是一個月(30天)內執行,weekly 即是在一周之內執行一次。

其 實這種說法不太好,因為它用的不是人類的日歷來定啟動任務的時間,而是利用天數,像"每月",是指在"每月"執行的任務完成後的三十天內不再執行第二次, 而不是自然月的"三十天左右",不管什麽原因(比如關機了超過一個月),三十天後 anacron 啟動之時該任務依然會被執行,"周"任務同理。

第 二部分 delay 是指輪回內的重試時間,這個意思有兩部分,一個是 anacron 啟動以後該服務 ready 暫不運行的時間(周任務的 70 delay 在 anacron 啟動後70分鐘內不執行,而處於 ready 狀態),另一個是指如果該任務到達運行時間後卻因為某種原因沒有執行(比如前一個服務還沒有運行完成,anacron 在 /etc/init.d 的腳本中加了一個 -s 參數,便是指在前一個任務沒有完成時不執行下一個任務),依然以周任務和月任務為例,周任務在啟動 anacron 後的  70 分鐘執行,月任務在服務啟動後 75 分鐘執行,但是,如果月任務到達服務啟動後 75 分鐘,可是周任務運行超過5分鐘依然沒有完成,那月任務將會進入下一個 75 分鐘的輪回,在下一個 75 分鐘時再檢查周任務是否完成,如果前一個任務完成了那月任務開始運行。
(這裏有一個問題,如果周任務在後臺死掉了,成僵屍進程了,難道月任務永遠也不執行?!)

第 三部分 job-identifier 非常簡單,anacron 每次啟動時都會在 /var/spool/anacron 裏面建立一個以 job-identifier 為文件名的文件,裏面記錄著任務完成的時間,如果任務是第一次運行的話那這個文件應該是空的。這裏只要註意不要用不可以作為文件名的字符串便可,可能的話 文件名也不要太長。註:根據我的理解,其實就是anacron運行時,會去檢查“/var/spool/anacron/這部分”文件中的內容,內容為一個日期,根據這個日期判斷下面的第四部分要不要執行。 比如說這裏寫的是cron.daily,然後/var/spool/anacron/cron.daily文件中記錄的日期為昨天的話,那anancron執行後就行執行這一行對應第四行的動作。

第四部分最為簡單,僅僅是你想運行的命令,run-parts 我原以為是 anacron 配置文件的語法,後來才看到有一個 /usr/bin/run-parts,可以一次運行整個目錄的可執行程序。

實戰自運行任務,讓我們以兩種不同的方式寫一個自己運行的任務,這樣就更好理解了!


寫一個 /etc/cron.daily/wall.cron,內容為如下:


wall anacron is running/!
pstree > /tmp/pstree-
.log然後將rmf/var/spool/anacron/將所有任務置為都未完成的狀態,重新啟動anacron:serviceanacronrestart,可以psA看看,anacron已經運行在後臺了。等5分鐘以後(因為還有其它任務在運行,時間可能會微微多於5分鐘),屏幕上將輸出anacronisrunning!同時/tmp下也留下兩個文件:anacron
.ps 和 pstree-
.log,
為當時 anacron 的進程號。

還有一種寫法直接寫入 /etc/anacrontab,一步一步來,把 /etc/anacrontab 中的 daily, weekly, monthly 三行註釋掉,然後在末尾加入一行:


1       1       anacron.test            /etc/cron.daily/wall.cron



刪除 /var/spool/anacron 目錄中的文件後重新啟動 anacron 服務,等一分種過去之後屏幕上又會輸出成功的信息:anacron is running! 

任務完成之後用 ps -A 查看運行中的進程,會發現 anacron 在運行完所有任務之後自動退出了。

這使魯瑩引出了一個問題:anacron 完成所有任務退出之後,如果不關機或者重新啟動 anacron 服務,進入下一個時間輪回,由誰來啟動那些任務呢?
確實是個問題,我想要不在 anacrontab 指定一個很大很大的天數,讓 anacron 永遠也不退出(36500 一百年夠了吧。 ^_^),要不系統會每隔一個月調用一次 anacron(manpage 好像是這麽寫的)。



本文轉自 http://blog.csdn.net/dycwahaha/archive/2007/12/20/1954938.aspx






2. xinetd服(默認機器沒有安裝這個服務,需要yum install xinetd安裝) http://blog.sina.com.cn/s/blog_465bbe6b010000vi.html 


使用xinetd管理網絡應用服務
中科院計算所 李洋
隨著互聯網的不斷發展以及Linux系統的不斷完善,以Linux為系統核心的網絡服務器的比重正在逐年上升
language=javascript1.1 src="http://ad.ccw.com.cn/adshow.asp?positionID=38&js=1&innerJs=1">
。從WWW服務器到目前流行的遊戲服務器,絕大多數都在采用Linux作為服務平臺。正是由於各種應用的不斷出現和用戶群的增長,基於Linux的系統應當擁有完善的安全措施,應當足夠堅固、能夠抵抗來自Internet的侵襲,這也正是Linux之所以流行並且成為Internet骨幹力量的主要原因。一方面,Linux為用戶提供了多種優質的網絡服務,包括Http、Ftp、Smtp、Pop3等;另一方面,服務的增多意味著更多的風險。每種服務本身都必然存在著某些缺陷,而這些缺陷很有可能被高明的黑客利用來對系統進行攻擊。所以,提供特定服務的服務器應該盡可能開放提供服務必不可少的端口,而將與服務器服務無關的服務關閉,比如:一臺作為www和ftp服務器的機器,應該只開放80和25端口,而將其他無關的服務如關掉,以減少系統漏洞。本專題將著重講述在Linux系統中如何使用xinetd機制來管理網絡應用服務。
Xinetd機制介紹
在Linux系統的早期版本中,有一種稱為inetd的網絡服務管理程序,也叫作“超級服務器”,就是監視一些網絡請求的守護進程,其根據網絡請求來調用相應的服務進程來處理連接請求。inetd.conf則是inetd的配置文件。inetd.conf文件告訴inetd監聽哪些網絡端口,為每個端口啟動哪個服務。在任何的網絡環境中使用Linux系統,第一件要做的事就是了解一下服務器到底要提供哪些服務。不需要的那些服務應該被禁止掉,這樣黑客就少了一些攻擊系統的機會,因為服務越多,意味著遭受攻擊的風險越打。用戶可以查看“/etc/inetd.conf”文件,了解一下inetd提供和開放了哪些服務,以根據實際情況進行相應的處理。而在Linux7.X的版本當中則使用xinetd(擴展的超級服務器)的概念對inetd進行了擴展和替代。因此本專題主要以xinetd為背景,來講述如何增加和刪除網絡服務,從而有效地保證Linux系統安全。
xinetd的默認配置文件是/etc/xinetd.conf。其語法和/etc/inetd.conf完全不同且不兼容。它本質上是/etc/inetd.conf和/etc/hosts.allow,/etc/hosts.deny功能的組合。
系統默認使用xinetd的服務可以分為如下幾類:
l         標準internet服務:http、telnet、ftp等;
l         信息服務:finger、netstat、systat;
l         郵件服務:imap、pop3、smtp;
l         RPC服務:rquotad 、rstatd、rusersd、sprayd、walld;
l         BSD服務:comsat、exec、login、ntalk、shell talk;
l         內部服務:chargen、daytime、echo等;
l         安全服務:irc;
l         其他服務:name、tftp、uucp、wu-ftp;
上述xinetd提供的服務的用途以及使用方法,用戶可以查找相關的資料獲得,這裏不再贅述。然而,對他們有詳細地了解是必不可少的,這可以幫助用戶較好地確定需要或者不需要哪些網絡服務功能。
下面是一個典型的/etc/xinetd.conf文件的例子:
```
# vi xinetd.conf
#
# Simple configuration file for xinetd
#
# Some defaults, and include /etc/xinetd.d/
defaults
{
    instances               = 60
     log_type                = SYSLOG authpriv
     log_on_success      = HOST PID
     log_on_failure      = HOST
     cps         = 25 30
}
includedir /etc/xinetd.d
從文件最後一行可以清楚地看到,/etc/xinetd.d目錄是存放各項網絡服務(包括http、ftp等)的核心目錄,因而系統管理員需要對其中的配置文件進行熟悉和了解。
一般說來,在/etc/xinetd.d的各個網絡服務配置文件中,每一項具有下列形式:
service service-name
{
Disabled             //表明是否禁用該服務
Flags                    //可重用標誌
Socket_type         //TCP/IP數據流的類型,包括stream,datagram,raw等
Wait                            //是否阻塞服務,即單線程或多線程
User                            //服務進程的uid
Server                  //服務器守護進程的完整路徑
log_on_failure       //登陸錯誤日誌記錄
}
```
其中service是必需的關鍵字,且屬性表必須用大括號括起來。每一項都定義了由service-name定義的服務。
Service-name是任意的,但通常是標準網絡服務名,也可增加其他非標準的服務,只要它們能通過網絡請求激活,包括localhost自身發出的網絡請求。
每一個service有很多可以使用的attribute,操作符可以是=,+=,或-=。所有屬性可以使用=,其作用是分配一個或多個值,某些屬性可以使用+=或-=的形式,其作用分別是將其值增加到某個現存的值表中,或將其值從現存值表中刪除。
用戶應該特別註意的是:每一項用戶想新添加的網絡服務描述既可以追加到現有的/etc/xinetd.conf中,也可以在/etc/xinetd.conf中指定的目錄中分別建立單獨的文件,RedHat 7.x以上的版本都建議采用後一種做法,因為這樣做的可擴充性很好,管理起來也比較方便,用戶只需要添加相應服務的描述信息即可追加新的網絡服務。
RedHat 7.x默認的服務配置文件目錄是/etc/xinetd.d,在該目錄中使用如下命令可以看到許多系統提供的服務:
```
#cd /etc/xinetd.d
#ls
chargen      cvspserver  daytime-udp  echo-udp  ntalk  qmail-pop3  rexec   rsh    sgi_fam  telnet  time-udp  chargen-udp  daytime     echo         finger    pop3   qmail-smtp  rlogin  rsync  talk     time    wu-ftpd
然而,上述的許多服務,默認都是關閉的,看看如下文件內容:
#cat telnet
# default: off    //表明默認該服務是關閉的
# description: The telnet server serves telnet sessions; it uses #       unencrypted username/password pairs for authentication.
service telnet
{
        disable = yes   //表明默認該服務是關閉的
        flags           = REUSE
        socket_type     = stream       
        wait            = no
        user            = root
        server          = /usr/sbin/in.telnetd
        log_on_failure  += USERID
}
```
服務的開啟與關閉
一般說來,用戶可以使用兩種辦法來對網絡服務進行開啟與關閉。一種為通過文件直接編寫進行開啟與關閉;另外一種則通過用戶熟悉的圖形用戶界面進行。下面分別進行介紹。
(1)使用/etc/xinetd.d目錄下的文件進行配置
針對上面列出的關於telnet的例子,用戶想要開啟服務,只需要通過使用vi 編輯器改寫該文件為如下內容:
```
service telnet
{
        disable = no   //將該域置為“no”,則表明開啟該服務
        flags           = REUSE
        socket_type     = stream       
        wait            = no
        user            = root
        server          = /usr/sbin/in.telnetd
        log_on_failure  += USERID
}
```
然後,需要使用/etc/rc.d/init.d/xinetd restart來激活Telnet服務即可。
相對應的,如果用戶想要關閉某個不需要的服務,則將上述的disable = no改為disable = yes即可,這樣就修改了服務配置,並且再次使用/etc/rc.d/init.d/xinetd restart來啟用最新的配置。
這種方法使用起來相對於Windows下的圖形配置方法較為復雜,用戶需要對其中的每個參數都有清楚地了解,不能夠隨意修改,所以建議高級用戶或者是有經驗的用戶使用。
 
(2)使用圖形用戶界面進行配置:
用戶可以在終端下鍵入“setup”命令來對系統提供的服務、防火墻配置、用戶授權配置、網絡配置、聲卡配置、打印機配置等進行全方位的配置,如圖1所示。
圖1 配置工具示意圖
用戶選擇其中的System services進行配置即可,將會看到如圖2所示的用戶界面:
圖2 系統服務配置示意圖
用戶將會看到系統羅列出了anacron,apmd,autofs,chargen,telnet,http等包括我們上面所講述的xinetd管理的網絡服務在內的系統服務進程,用戶通過選擇這些進程,則可以開啟相應的服務。而如果用戶想關掉其中的某個服務,則取消選擇,保存退出即可以完成配置。
而用戶這樣設置的結果,就相當於直接對/etc/xinetd.d相應網絡服務的配置文件進行了改寫,只不過使用起來更加直觀和方便,且不需要用戶具有比較熟練的Linux使用技巧。
同樣需要註意的是,在配置好了相應的網絡服務之後,需要執行/etc/rc.d/init.d/xinetd restart命令來對新的改動進行激活,那麽就能夠使用最新配置的服務了。
最後強調用戶註意的是,本文給出的使用方法使用效率的高低、正確與否,極大程度上取決於具體的應用,以及用戶對各項服務理解程度的不同。希望用戶在配置自己的Linux服務器之前,對各種應用服務都作深入地了解,待到根據實際的應用需求確定好需要開啟和哪些網絡服務之後再使用xinetd機制進行配置,切忌稀裏糊塗地進行配置,反而導致產生較大的漏洞和風險。




3. systemd自定義啟動腳本 http://www.jb51.net/article/100457.htm 




systemd添加自定義系統服務設置自定義開機啟動的方法

投稿:jingxian 字體:[增加 減小] 類型:轉載 時間:2016-12-19 我要評論


下面小編就為大家帶來一篇systemd添加自定義系統服務設置自定義開機啟動的方法。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
.
 
.

 
1.服務權限
 
systemd有系統和用戶區分;系統(/user/lib/systemd/system/)、用戶(/etc/lib/systemd/user/).一般系統管理員手工創建的單元文件建議存放在/etc/systemd/system/目錄下面。
 
2.創建服務文件
``` 



?



12345678910111213141516 

[Unit]Description=nginx - high performance web serverDocumentation=http://nginx.org/en/docs/After=network.target remote-fs.target nss-lookup.target  [Service]Type=forkingPIDFile=/run/nginx.pidExecStartPre=/usr/sbin/nginx -t -c /etc/nginx/nginx.confExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.confExecReload=/bin/kill -s HUP $MAINPIDExecStop=/bin/kill -s QUIT $MAINPIDPrivateTmp=true  [Install]WantedBy=multi-user.target 

[Unit]
``` 
Description : 服務的簡單描述
 
Documentation : 服務文檔
 
Before、After:定義啟動順序。Before=xxx.service,代表本服務在xxx.service啟動之前啟動。After=xxx.service,代表本服務在xxx.service之後啟動。
 
Requires:這個單元啟動了,它需要的單元也會被啟動;它需要的單元被停止了,這個單元也停止了。
 
Wants:推薦使用。這個單元啟動了,它需要的單元也會被啟動;它需要的單元被停止了,對本單元沒有影響。
 
[Service]
 
Type=simple(默認值):systemd認為該服務將立即啟動。服務進程不會fork。如果該服務要啟動其他服務,不要使用此類型啟動,除非該服務是socket激活型。
 
Type=forking:systemd認為當該服務進程fork,且父進程退出後服務啟動成功。對於常規的守護進程(daemon),除非你確定此啟動方式無法滿足需求,使用此類型啟動即可。使用此啟動類型應同時指定 PIDFile=,以便systemd能夠跟蹤服務的主進程。
 
Type=oneshot:這一選項適用於只執行一項任務、隨後立即退出的服務。可能需要同時設置 RemainAfterExit=yes 使得 systemd 在服務進程退出之後仍然認為服務處於激活狀態。
 
Type=notify:與 Type=simple 相同,但約定服務會在就緒後向 systemd 發送一個信號。這一通知的實現由 libsystemd-daemon.so 提供。
 
Type=dbus:若以此方式啟動,當指定的 BusName 出現在DBus系統總線上時,systemd認為服務就緒。
 
Type=idle: systemd會等待所有任務(Jobs)處理完成後,才開始執行idle類型的單元。除此之外,其他行為和Type=simple 類似。
 
PIDFile:pid文件路徑
 
ExecStart:指定啟動單元的命令或者腳本,ExecStartPre和ExecStartPost節指定在ExecStart之前或者之後用戶自定義執行的腳本。Type=oneshot允許指定多個希望順序執行的用戶自定義命令。
 
ExecReload:指定單元停止時執行的命令或者腳本。
 
ExecStop:指定單元停止時執行的命令或者腳本。
 
PrivateTmp:True表示給服務分配獨立的臨時空間
 
Restart:這個選項如果被允許,服務重啟的時候進程會退出,會通過systemctl命令執行清除並重啟的操作。
 
RemainAfterExit:如果設置這個選擇為真,服務會被認為是在激活狀態,即使所以的進程已經退出,默認的值為假,這個選項只有在Type=oneshot時需要被配置。
 
[Install]
 
Alias:為單元提供一個空間分離的附加名字。
 
RequiredBy:單元被允許運行需要的一系列依賴單元,RequiredBy列表從Require獲得依賴信息。
 
WantBy:單元被允許運行需要的弱依賴性單元,Wantby從Want列表獲得依賴信息。
 
Also:指出和單元一起安裝或者被協助的單元。
 
DefaultInstance:實例單元的限制,這個選項指定如果單元被允許運行默認的實例。
 
3.重載服務
 
systemctl enable nginx.service
 
就會在/etc/systemd/system/multi-user.target.wants/目錄下新建一個/usr/lib/systemd/system/nginx.service 文件的鏈接。
 
4.操作服務
```



?



12345678910111213141516171819 

#啟動服務$ sudo systemctl start nginx.service  
#查看日誌$ sudo journalctl -f -u nginx.service
— Logs begin at 四 2015-06-25 17:32:20 CST. 
—6月 25 10:28:24 Leco.lan systemd[1]: Starting nginx – high performance web server…
6月 25 10:28:24 Leco.lan nginx[7976]: nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
6月 25 10:28:24 Leco.lan nginx[7976]: nginx: configuration file /etc/nginx/nginx.conf test is successful
6月 25 10:28:24 Leco.lan systemd[1]: Started nginx – high performance web server.  
#重啟$ sudo systemctl restart nginx.service  
#重載$ sudo systemctl reload nginx.service  
#停止$ sudo systemctl stop nginx.service 
```


10.23 linux任務計劃cron10.24chkconfig工具10.25 systemd管理服務10.26 unit介紹 10.27 target介紹