标签: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 ``` [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 – 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介绍
标签:10.23 linux任务计划cron10.24chkconfig工具10.25 systemd管理服务10.26 unit介绍 10.27 target介绍
原文地址:http://ch71smas.blog.51cto.com/13090095/1966485