10.23 linux任务计划cron10.24chkconfig工具10.25 systemd管理服务10.26 unit介绍 10.27 target介绍

时间:2020-11-29 14:19:46
- 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
```
[root@aminglinux-001 ~]# 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

[root@aminglinux-001 ~]# 
```

-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进入编辑模式
```
[root@aminglinux-001 ~]# 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 就说明启动了
```
[root@aminglinux-001 ~]# systemctl start crond
[root@aminglinux-001 ~]# 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
[root@aminglinux-001 ~]# 
```
-还可以使用systmctl status crond 查看 ,Active: active (running)表示它已经启动了
```
[root@aminglinux-001 ~]# 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.
[root@aminglinux-001 ~]# 

```

-现在把它停掉 再看下它的状态 Active: inactive (dead) 表示已经停止了
```
[root@aminglinux-001 ~]# systemctl stop crond
[root@aminglinux-001 ~]# 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.
[root@aminglinux-001 ~]# 
```

-[root@aminglinux-001 ~]# systemctl start crond
-有时候任务计划,写了一个计划 放到配置文件里,但是就是没执行,据老师的经验,可能脚本里仅仅是用了一个命令,而没有用绝对路径,

- 要么把命令写绝对路径,要么把命令的路径加到变量里面来,最好的办法就是写绝对路径
- 建议大家,每次写一个任务计划都要追加一个 文件,日志文件,不管错误还是正确 都有据可查



-任务计划怎么去备份呢
```
[root@aminglinux-001 ~]# crontab -l
no crontab for root
[root@aminglinux-001 ~]# 
```

-先crontab -e 随便写一个任务计划
```
[root@aminglinux-001 ~]# 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 可以看出来
```
[root@aminglinux-001 ~]# crontab -l
1 10 * 2 * /usr/bin/find /tmp/ -type f -mtime +100 |xargs rm -f
[root@aminglinux-001 ~]# 
```
-将以用户的名字命名一个文件,这个文件内容就是你的计划任务列表,如果备份的话就是把这个目录文件拷贝一份就可以
```
[root@aminglinux-001 ~]# cat /var/spool/cron/root
1 10 * 2 * /usr/bin/find /tmp/ -type f -mtime +100 |xargs rm -f
[root@aminglinux-001 ~]# 
```

-crontab -e 编辑
-crontab -l 查看
-crontab -r 删除

```
[root@aminglinux-001 ~]# crontab -r
[root@aminglinux-001 ~]# crontab -l
no crontab for root
[root@aminglinux-001 ~]# 
```
-crontab -u root -l 指定一个用户
```
[root@aminglinux-001 ~]# crontab -u root -l
no crontab for root
[root@aminglinux-001 ~]# 
```








# 10.24 chkconfig 工具
-linux系统服务管理
-chkconfig --list
-命令解释:当前系统下使用chkconfig的服务都有哪些
```
[root@aminglinux-001 ~]# 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:关
[root@aminglinux-001 ~]# 
```
-一个netconsole,另一个是network,6版本之前的使用的管理机制是sysV ,7版本的用的管理机制叫 systemd,

-这个服务在这个配置文件下/etc/init.d/
```
[root@aminglinux-001 ~]# ls /etc/init.d/
functions  netconsole  network  README
[root@aminglinux-001 ~]# 
```
-chkconfig network off 把network服务都关了
```
[root@aminglinux-001 ~]# chkconfig network off
[root@aminglinux-001 ~]# 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:关
[root@aminglinux-001 ~]# 
```
-chkconfig network on 再把network服务打开
```
[root@aminglinux-001 ~]# chkconfig network on
[root@aminglinux-001 ~]# 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:关
[root@aminglinux-001 ~]# 
```
- 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 服务关了
```
[root@aminglinux-001 ~]# 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:关
[root@aminglinux-001 ~]# chkconfig --level 3 network off
[root@aminglinux-001 ~]# 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:关
[root@aminglinux-001 ~]# 
```



-chkconfig --level 345 network off  把3、4、5级别关了network服务
```
[root@aminglinux-001 ~]# chkconfig --level 345 network off
[root@aminglinux-001 ~]# 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:关
[root@aminglinux-001 ~]# 
```
-可以把一个脚本加入到一个服务列表里面来 -chkconfig --add network
```
[root@aminglinux-001 ~]# cd /etc/init.d
[root@aminglinux-001 init.d]# ls
functions  netconsole  network  README
[root@aminglinux-001 init.d]# cp network 123
[root@aminglinux-001 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
[root@aminglinux-001 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:关
[root@aminglinux-001 init.d]# chkconfig --add 123
[root@aminglinux-001 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:关
[root@aminglinux-001 init.d]# 
```
-用vim 打开123 看下
```
[root@aminglinux-001 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
```
[root@aminglinux-001 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:关
[root@aminglinux-001 init.d]# vim 123
[root@aminglinux-001 init.d]# chkconfig --del 123
[root@aminglinux-001 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:关
[root@aminglinux-001 init.d]# 
```





# 10.25 systemd管理服务

- 在centos 6之前包括 6 我们可以用chkconfig这个工具管理系统的服务,在centos 7里也可以使用,但是会提示,目前已经使用systemd 服务


-在centos7里面会提示使用命令systemctl list-unit-files 来查看所有的服务,这个包含了很多东西,不仅有service,还有target,socket
```
[root@aminglinux-001 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 
autovt@.service                             enabled 
blk-availability.service                    disabled
brandbot.service                            static  
chrony-dnssrv@.service                      static  
chrony-wait.service                         disabled
lines 1-22
```

-下面先来看看几个和systemd服务相关的命令
-使用命令systemctl list-units --all --type=service  指定类型为service服务的,列出来所有的都是service,还有其他信息,包括描述信息,是否是running active loaded
```
[root@aminglinux-001 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
  getty@tty1.service         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          不让服务开机启动
```
[root@aminglinux-001 init.d]# systemctl enable crond.service
[root@aminglinux-001 init.d]# systemctl disable crond
Removed symlink /etc/systemd/system/multi-user.target.wants/crond.service.
```


-systemctl status crond          查看状态
```
[root@aminglinux-001 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.
[root@aminglinux-001 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.
[root@aminglinux-001 init.d]# 
```

-systemctl stop  crond           停止服务
-systemctl start  crond          启动服务
-systemctl restart  crond        重启服务
-systemctl is enabled crond      检查服务是否开机启动
```
[root@aminglinux-001 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.

[root@aminglinux-001 init.d]# systemctl is-enabled crond
enabled
[root@aminglinux-001 init.d]# 

[root@aminglinux-001 init.d]# systemctl disable crond
Removed symlink /etc/systemd/system/multi-user.target.wants/crond.service.
[root@aminglinux-001 init.d]# systemctl is-enabled crond
disabled
[root@aminglinux-001 init.d]# 
```
- 从这里可以获得service的配置文件内容
```
[root@aminglinux-001 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.
[root@aminglinux-001 init.d]# 
```
- 可以看下这个文件内容
```

[root@aminglinux-001 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

[root@aminglinux-001 init.d]# 
[root@aminglinux-001 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
[root@aminglinux-001 init.d]# 

```
-它实际上是一个软链接,软链接到了/usr/lib/systemd/system/crond.service 这里,如果改成disable,那个软链接文件就被挪走了
```
[root@aminglinux-001 init.d]# systemctl disable crond
Removed symlink /etc/systemd/system/multi-user.target.wants/crond.service.
[root@aminglinux-001 init.d]# ls -l /etc/systemd/system/multi-user.target.wants/crond.service
ls: 无法访问/etc/systemd/system/multi-user.target.wants/crond.service: 没有那个文件或目录
[root@aminglinux-001 init.d]# 
```










# 10.26 unit介绍
-通过enable disable大概的了解了,如果是enable 就会创建一个软链接,软链接目录所在的源目录是这个目录/usr/lib/systemd/system/,这个目录下面都有上面东西呢,可以来看下,
```
[root@aminglinux-001 init.d]# ls /usr/lib/systemd/system
arp-ethers.service                      remote-fs.target
auditd.service                          rescue.service
autovt@.service                         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
chrony-dnssrv@.service                  rhel-import-state.service
chrony-dnssrv@.timer    
```
-这里很多文件,只列取了一部分,service. .target .timer 很多类型,这些都叫unit
-主要分成这几种类型
-service 系统服务
-target 多个unit组成的组
```
[root@aminglinux-001 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
[root@aminglinux-001 system]# 
```
- [ ] unit里面有一种类型,target,实际上就是多个service 多个unit组成的一个组,形成的一个target
-device 硬件设备
-mount 文件系统挂载点
-automount 自动挂载点
-path 文件或路径
-scope 不是由systemd启动的外部进程
-slice 进程组
-snapshot systemd 快照
-socket 进程间通信套接字
-sawp swap 文件
-timer 定时器


-unit相关的命令
-systemctl list units列出正在运行的unit
```
[root@aminglinux-001 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
```

[root@aminglinux-001 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
```
[root@aminglinux-001 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
```
[root@aminglinux-001 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
  getty@tty1.service          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,
  lvm2-pvscan@8:17.service    loaded active exited  LVM2 PV scan on device 8:17
  lvm2-pvscan@8:18.service    loaded active exited  LVM2 PV scan on device 8:18
  lvm2-pvscan@8: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
```
[root@aminglinux-001 system]# systemctl is-active crond.service
active
[root@aminglinux-001 system]# systemctl is-enabled crond.service
disabled
[root@aminglinux-001 system]# systemctl enable crond
Created symlink from /etc/systemd/system/multi-user.target.wants/crond.service to /usr/lib/systemd/system/crond.service.
[root@aminglinux-001 system]# systemctl is-enabled crond.service
enabled
[root@aminglinux-001 system]# 
```







# 10.27 target介绍
-linux系统服务管理-systemd
-系统为了方便管理用target来管理unit
-systemctl list-unit-files --type=target 可以列出所有的tartget
```
[root@aminglinux-001 ~]# 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
```
[root@aminglinux-001 ~]# 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
● │ └─getty@tty1.service
● └─remote-fs.target
lines 63-89/89 (END)

```
-查看系统默认的target,  systemctl get-default
```
[root@aminglinux-001 ~]# systemctl get-default
multi-user.target
[root@aminglinux-001 ~]# 
```
-设置一个默认的target
-systemctl set-default multi-user.target
```
[root@aminglinux-001 ~]# 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.
[root@aminglinux-001 ~]# 
```
-设置默认target的时候 它会创建一个软链接/etc/systemd/system/default.target
```
[root@aminglinux-001 ~]# ls /etc/systemd/system/default.target
/etc/systemd/system/default.target
[root@aminglinux-001 ~]# 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
[root@aminglinux-001 ~]# 
```

- [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
```
[root@aminglinux-001 ~]# 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
[root@aminglinux-001 ~]# 
```

- 看下/usr/lib/systemd/system/crond.service  同样的也是属于multi-user.target
```
[root@aminglinux-001 ~]# 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

[root@aminglinux-001 ~]# 

```
- [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 �C 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 �C high performance web server.  
#重启$ sudo systemctl restart nginx.service  
#重载$ sudo systemctl reload nginx.service  
#停止$ sudo systemctl stop nginx.service 
```