linux 学习笔记-034-日常运维-linux 任务计划 crond,chkconfig 工具,systemd 管理服务,unit 和 target

发布于 2018-01-30  392 次阅读


crontab 任务计划

建议设置任务计划的时候做一个追加日志的操作,便于以后排查

启动服务:

[root@am-01:~#] systemctl start crond

[root@am-01:~#] ps -aux | grep crond

root        740  0.0  0.1 126372  1724 ?        Ss   1 月 07   0:09 /usr/sbin/crond -n

root      30970  0.0  0.0 112672   980 pts/0    S+   00:25   0:00 grep --color=auto crond

配置文件:/etc/crontab

格式:分 时 日 月 周 user command

分范围 0-59,时范围 0-23,日范围 1-31,月范围 1-12,周 1-7

[root@am-01:~#] 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

每天凌晨 3:00 执行一个脚本,并把正确的运行信息和错误的运行信息追加到指定文件

[root@am-01:~#] crontab -e

0 3 * * * /bin/bash /tmp/1.sh >>/tmp/1.log 2>> /tmp/1.log

可用格式 1-5 表示一个范围 1 到 5

可用格式 1,2,3 表示 1 或者 2 或者 3

可用格式*/2 表示被 2 整除的数字,比如小时,那就是每隔 2 小时

每两个月的 1-10 号的周二和周五的凌晨 3:00 执行一个脚本,并把正确的运行信息和错误的运行信息追加到指定文件

[root@am-01:~#] crontab -e

0 3 1-10 */2 2,5 /bin/bash /tmp/1.sh >>/tmp/1.log 2>> /tmp/1.log

列出 crontab 的计划以及备份

备份:crontab 的计划会生成以当前登录用户命名的文件,在/var/spool/cron/目录下,备份只需要备份对应用户的文件即可

[root@am-01:~#] crontab -e

no crontab for root - using an empty one

crontab: installing new crontab

[root@am-01:~#] crontab -l

0 3 1-10 */2 2,5 /bin/bash /tmp/1.sh >>/tmp/1.log 2>> /tmp/1.log

[root@am-01:~#] cat /var/spool/cron/root

0 3 1-10 */2 2,5 /bin/bash /tmp/1.sh >>/tmp/1.log 2>> /tmp/1.log

删除任务计划

[root@am-01:~#] crontab -r

[root@am-01:~#] crontab -l

no crontab for root

使用-u 指定一个用户

[root@am-01:~#] crontab -u root -l

no crontab for root

[root@am-01:~#] crontab -u user1 -l

no crontab for user1

linux 系统服务管理 - chkconfig

主要在 CentOS-7 之前的版本使用

运行级别详解:

运行级别 0:系统停机状态,系统默认运行级别不能设为 0,否则不能正常启动

运行级别 1:单用户工作状态,root 权限,用于系统维护,禁止远程登陆

运行级别 2:多用户状态(没有 NFS)

运行级别 3:完全的多用户状态(有 NFS),登陆后进入控制台命令行模式

运行级别 4:系统未使用,保留

运行级别 5:X11 控制台,登陆后进入图形 GUI 模式

运行级别 6:系统正常关闭并重启,默认运行级别不能设为 6,否则不能正常启动

列出当前系统在使用 chkconfig 的服务,服务在/etc/init.d/目录下

[root@am-01:~#] 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@am-01:~#] ls /etc/init.d/

functions  netconsole  network  README

关闭和开启某服务

[root@am-01:~#] chkconfig network off

[root@am-01:~#] 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@am-01:~#] chkconfig network on

[root@am-01:~#] 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@am-01:~#] chkconfig --level 3 network off

[root@am-01:~#] 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@am-01:~#] chkconfig --level 35 network off

[root@am-01:~#] 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@am-01:~#] chkconfig --level 345 network on

[root@am-01:~#] 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:关

把某个服务加入到服务列表中去,首先把服务的启动脚本放到/etc/init.d/,然后使用--add 把服务添加到服务列表

[root@am-01:~#] cd /etc/init.d/

[root@am-01:/etc/init.d#] cp network 123

[root@am-01:/etc/init.d#] ls

123  functions  netconsole  network  README

[root@am-01:/etc/init.d#] chkconfig --add 123

[root@am-01:/etc/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:关

/etc/init.d/目录下脚本文件解析:

以下这几部分内容必须存在,要不然无法识别

#! /bin/bash

# chkconfig: 2345 10 90

# description: Activates/Deactivates all network interfaces configured to \

#              start at boot time.

把某个服务从服务列表中删除

[root@am-01:/etc/init.d#] chkconfig --del 123

[root@am-01:/etc/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:关

linux 系统服务管理 - systemd

列出服务列表及其描述信息

[root@am-01:~#] systemctl list-units --all --type=service

设置某服务开机启动及开机不启动,事实上就是创建或删除该服务的软链接

[root@am-01:~#] systemctl enable crond

[root@am-01:~#] systemctl disable crond

rm '/etc/systemd/system/multi-user.target.wants/crond.service'

查看某服务的状态

[root@am-01:~#] systemctl status crond.service

crond.service - Command Scheduler

Loaded: loaded (/usr/lib/systemd/system/crond.service; disabled)

Active: active (running) since 日 2018-01-07 06:22:19 CST; 2 weeks 2 days ago

Main PID: 740 (crond)

CGroup: /system.slice/crond.service

└─740 /usr/sbin/crond -n



1 月 07 06:22:19 aming-01 systemd[1]: Started Command Scheduler.

1 月 07 06:22:19 aming-01 crond[740]: (CRON) INFO (RANDOM_DELAY will be scaled with factor 83% if used.)

1 月 07 06:22:19 aming-01 crond[740]: (CRON) bad username (/etc/crontab)

1 月 07 06:22:20 aming-01 crond[740]: (CRON) INFO (running with inotify support)

1 月 24 00:25:06 am-01 systemd[1]: Started Command Scheduler.

停止,启动,重启某服务

[root@am-01:~#] systemctl stop crond

[root@am-01:~#] systemctl start crond

[root@am-01:~#] systemctl restart crond

检查服务是否开机启动

[root@am-01:~#] systemctl is-enabled crond

enabled

unit 介绍

target 由众多的 unit 组成

ls /usr/lib/systemd/system     //系统所有 unit,分为以下类型

service 系统服务

target 多个 unit 组成的组

device 硬件设备

mount 文件系统挂载点

automount 自动挂载点

path 文件或路径

scope 不是由 systemd 启动的外部进程

slice 进程组

snapshot systemd 快照

socket 进程间通信套接字

swap  swap 文件

timer 定时器

CentOS-7 也有类似之前版本里面的运行级别的概念,即 target

[root@am-01:/usr/lib/systemd/system#] ll runlevel*

lrwxrwxrwx. 1 root root 15 12 月  5 00:05 runlevel0.target -> poweroff.target

lrwxrwxrwx. 1 root root 13 12 月  5 00:05 runlevel1.target -> rescue.target

lrwxrwxrwx. 1 root root 17 12 月  5 00:05 runlevel2.target -> multi-user.target

lrwxrwxrwx. 1 root root 17 12 月  5 00:05 runlevel3.target -> multi-user.target

lrwxrwxrwx. 1 root root 17 12 月  5 00:05 runlevel4.target -> multi-user.target

lrwxrwxrwx. 1 root root 16 12 月  5 00:05 runlevel5.target -> graphical.target

lrwxrwxrwx. 1 root root 13 12 月  5 00:05 runlevel6.target -> reboot.target

unit 相关的命令

列出正在运行的 unit

[root@am-01:~#] systemctl list-units

列出所有,包括失败的或者 inactive 的 unit

[root@am-01:~#] systemctl list-units --all

列出 inactive 的 unit

[root@am-01:~#] systemctl list-units --all --state=inactive

列出状态为 active 的 service

[root@am-01:~#] systemctl list-units --type=service

查看某个服务是否为 active

[root@am-01:~#] systemctl is-active crond.service

active

target 介绍

系统为了方便管理用 target 来管理 unit,target 下面也可以继续有 target

列出系统所有的 target

[root@am-01:~#] systemctl list-unit-files --type=target

查看某个 target 下面都有哪些 unit

[root@am-01:~#] systemctl list-dependencies multi-user.target

查看系统默认的 target

[root@am-01:~#] systemctl get-default

multi-user.target

设置默认的 target

[root@am-01:~#] systemctl set-default multi-user.target

rm '/etc/systemd/system/default.target'

ln -s '/usr/lib/systemd/system/multi-user.target' '/etc/systemd/system/default.target'

[root@am-01:~#] ll /etc/systemd/system/default.target

lrwxrwxrwx. 1 root root 41 1 月  24 06:05 /etc/systemd/system/default.target -> /usr/lib/systemd/system/multi-user.target

总结:

一个 service 属于一种类型的 unit

多个 unit 组成了一个 target

一个 target 里面包含了多个 service

查看某个服务属于哪个 target

[root@am-01:~#] cat /usr/lib/systemd/system/sshd.service

[Unit]

Description=OpenSSH server daemon

After=network.target sshd-keygen.service

Wants=sshd-keygen.service



[Service]

EnvironmentFile=/etc/sysconfig/sshd

ExecStart=/usr/sbin/sshd -D $OPTIONS

ExecReload=/bin/kill -HUP $MAINPID

KillMode=process

Restart=on-failure

RestartSec=42s



[Install]

WantedBy=multi-user.target

crontab 分解图

 

扩展

anacron:

http://blog.csdn.net/strikers1982/article/details/4787226

xinetd(默认机器没有安装这个服务,需要 yum install xinetd 安装)

http://blog.sina.com.cn/s/blog_465bbe6b010000vi.html

systemd 自定义启动脚本:

http://www.jb51.net/article/100457.htm