linux任务计划cron,chkconfig工具,systemd管理服务,unit介绍,target介绍
linux任务计划cron
- 任务计划能够在指定的时间段
- 执行预先设置好的命令或者脚本

- 如图,cat /etc/crontab 查看任务计划配置文件内容
- crontab 文件里面定义了3个变量
- 分别是 SHELL,PATH,MAILTO
- SHELL 就是执行命令使用的shell是哪一个,这里是bash
- PATH 是环境变量,执行命令的时候
- 若是命令路径不是绝对路径,就会在这些环境变量的目录里面
- 寻找命令或者脚本文件
- MAILTO 是发送邮件给谁的变量,这里是 root

- 如图,配置文件下面是 任务计划的格式
- 第一个星号 * 能够设置分钟,设置的范围是 0-59
- 第二个星号 * 能够设置小时,设置范围是 0-23
- 第三个星号 * 能够设置每个月几号,设置范围是 1-31
- 第四个星号 * 能够设置月份,设置范围是 1-12 或者 jan,feb等月份英文简写代替数字
- 第五个星号 * 能够设置星期几,设置范围是 0-6
- 或者使用英文简写 sun,mon,tue 代替数字
- 其中 星期天 比较特殊,可使用数字 0 或者 7 表示
- 前面的星号 * 能够设置不一样的时间
- 设置完时间,后面接 执行命令的用户名称,就是 user-name
- 而后是被执行的 命令 或者 脚本 的路径
- 在 root 用户下写任务计划,若是不写 user-name
- 那么默认的用户名称就是 root
- 命令 crontab -e 能够定义任务计划

- 使用 crontab -e 进入任务计划编辑,操做跟vi同样,按 i 开始编辑
- 如图,0 3 * * * /bin/bash /usr/local/sbin/123.sh
- 这条命令是定义了一个天天3点0分执行123.sh脚本的任务计划
- 首先 0 表示第 0 分钟,3表示天天第3个小时,也就是3点
- 合起来就是 3点0分
- 后面 * 表示所有,不写数字,写 * 就表明全部的意思
- 第3个* 表示每个月几号,这里是 * ,就表示每月全部的日期
- 若是写一个数字,就表示特指那一天,写 * 就表示这个月的每一天
- 第4个* 表示月份,范围是 1-12 月,这里写 * 也表示所有
- 若是写一个数字,表示特指某一个月,写 * 就表示包含全部的月份
- 第5个* 表示星期几,这里写 * 表示包含一个星期的每一天
- /bin/bash 是指执行脚本用到的 shell
- /usr/local/sbin/123.sh 就是脚本的绝对路径
- 这里没有写执行的用户名称,那么就是默认的用户 root
- 因此这个任务命令的意思就是
- 每月,天天,3点,0分 ,不论是星期几,都执行 123.sh 脚本

- 如图后面还能够写 >>/tmp/123.log 2>>/tmp/123.log
- 这是把执行脚本产生的日志信息追加剧定向到 123.log
- 后面的 >>/tmp/123.log 表示把执行脚本的日志信息追加剧定向到 123.log
- 而后 2>>/tmp/123.log 表示把执行脚本的错误信息追加剧定向到 123.log
- 符号 >> 能够追加通常日志信息,2>>能够追加错误信息

- 如图,把第3个* 修改成 1-10
- 每一个 * 的位置,除了可使用单个数字外,还能够指定一个范围
- 好比这里 第3个* 表示每月的 1-31号,1-10 就表示 1号到10号 这个范围
- 这样修改以后,每月除了1-10号以外,就不会再执行这个脚本了

- 如图,还能够这样使用
- 第4个* 的位置,修改成 */2 意思是,能够整除 2 的月份才会执行脚本
- 第5个* 的位置,修改成 2,5 意思是 星期二 和 星期五才会执行脚本
- 因此整条命令的意思就是
- 整除2的月份,也就是双数月份,1-10号,3点0分,星期二或者星期五 执行脚本
- 第5个* 的位置,除了写单个数字,也能够写多个数字
- 好比 1,2,3 这样,不一样数字之间使用 , 分隔
- 时间设置这里不能够设置年份,可是实际上仍是能够指定某一年的某个时间执行命令
- 使用 星期 就能够肯定某一天的惟一性
- 好比今年的6月18号,和明年的6月18号,星期几 必定是不同的
- 因此设置星期几就能够肯定是 今年的6月18执行命令,仍是明年的6月18执行命令

- 要使用任务计划,须要启动任务计划服务,使用上图命令启动服务

- 要肯定服务是否启动成功,可使用上图命令查看进程
- 如图,下面有 /usr/sbin/crond -n 的进程在运行,说明启动成功

- 如图,使用命令 systemctl status crond 查看 crond 的状态
- 能够看到 绿色的字 active(running) 表示已经在运行了,说明服务启动成功

- 如图,若是关闭crond服务,再查看服务的状态
- 能够看到,以前绿色字的位置,变成了 inactive(dead) 就表示服务没有在运行
- 不少人遇到过这个问题,让任务计划执行一个脚本,可是最后任务计划并无执行
- 根据经验,颇有多是执行的脚本里面有一些问题
- 好比脚本里面执行 iptables 这个命令
- 若是让任务计划执行这个脚本,任务计划会在 环境变量 的目录里面
- 寻找 iptables 这个命令,若是找不到,这个脚本就执行不了
- 有两个办法解决
- 一个是把 iptables 命令文件的目录,加入到crontab配置文件的环境变量里面
- 第二个是脚本里面的命令,都使用绝对路径来写
- 好比,iptables 命令,不写 iptables 这样没有路径的命令
- 而是写 /usr/sbin/iptables 这样的命令文件绝对路径

- 如图,这个脚本设置了一个变量 ipt
- ipt 的值是 /usr/sbin/iptables ,这就是iptables命令文件的绝对路径
- 而后后面的命令都是使用 ipt 来执行的
- 这样就不会出现找不到命令路径的问题了
- 通常来讲不要修改crontab配置文件的环境变量
- 因此脚本最好仍是使用命令的绝对路径来写
- 每设置一个任务计划,应该在后面把任务日志追加剧定向到一个文件里面
- 这样若是一个任务计划出现了一些问题,就能够查看任务日志查找问题缘由

- 如图,crontab -l 就能够看到目前有什么任务计划
- 关于任务计划的备份

- 如图,crontab -l 就是 列出任务计划的意思
- crontab -l 列出的内容实际上保存在一个文件里面
- cat /var/spool/cron/root 能够看到,内容与crontab -l 列出的内容一致
- 目录 /var/spool/cron/ 里面保存了不一样用户的任务计划文件
- root用户的任务计划文件就是 root,若是是别的用户
- 任务计划文件的名称也跟别的用户名称是一致的
- 因此,要备份用户任务计划,到/var/spool/cron/ 目录下面
- 找到本身要备份的用户的任务计划,复制一份保存好就好了
- crontab 命令还有不一样的选项
- crontab -r 表示删除任务计划
- 如图,执行crontab -r 以后,再执行 crontab -l 能够发现任务计划没有了
- 下面显示 no crontab for root 表示任务计划已经没有了
- crontab -u root -l 能够显示指定用户的任务计划
- 参数 -u 能够指定用户名称,后面接用户名称 root
chkconfig工具
- chkconfig 是一个管理服务的工具
- 不过 centOS7 已经不使用这个工具对服务进行管理了
- 可是若是工做中使用的是旧版本的 centOS
- 就须要用到 chkconfig工具来管理服务

- 如图,chkconfig --list 能够查看chkconfig工具管理的服务
- 能够看到只有两个服务,可是以前启动了 crond 服务,这里没有显示
- 看中文说明,该输出结果只显示 SysV 服务
- SysV 服务是指并不是 centOS7 原生的服务
- 旧版centOS服务就是属于 SysV 服务
- centOS7 原生的服务属于 systemd 服务
- 这里不显示 systemd 服务,因此看不到 crond 服务

- 每一个服务都有它的脚本存在
- chkconfig 看到的两个服务的脚本的存放目录就是
- ls /etc/init.d/ 能够看到目录下面,有这两个服务名称的文件存在
- 这就是这两个服务的脚本文件

- 如图,0,1,2,3,4,5,6 表示linux的7个运行级别
- 0 表示关机,1 表示单用户模式
- 2 表示没有 nfs 服务的,多用户,无图形界面的模式
- 3 表示有 nfs 服务的,多用户,无图形界面的模式
- 4 是一个保留的级别,暂时没用
- 5 表示多用户的,有图形界面的模式
- 6 表示重启

- 如图,修改这个文件,能够定义系统默认的运行级别
- 若是把系统默认运行级别修改成 1 ,那么一开机就会进入单用户模式
- 若是默认级别修改成6 ,那么启动后就会重启,这样就进入不了系统了
- 不过 centOS7 开始已经再也不使用这个文件来定义默认运行级别

- 如图,使用 chkconfig network off 改变network的状态
- 再查看服务,能够看到,network 在 2-5 级别都是 关 的状态
- 这表示,系统在这几个运行级别中,这个服务都是关闭的状态

- 如图,使用命令 chkconfig network on
- 再查看服务状态
- 能够看到,运行级别 2-5 都显示为开
- 这表示,系统运行在这几个级别的时候,这个服务是开启状态

- 如图,能够指定服务在某一个运行级别关闭
- chkconfig --level 3 network off
- 这样就指定了 network服务 在3级别时关闭
- chkconfig --list 查看,3 后面是 关

- 如图,还能够同时设置不一样运行级别为关闭状态
- chkconfig --level 35 network off
- 就能够同时设置 级别 3 和 级别 5 的时候,服务为关闭状态
- 下面 chkconfig --level 345 network on
- 能够同时设置 服务 在运行级别 3,4,5 都为开启状态
- 0表明关机状态,1表明单用户模式,6表明重启状态
- 这 3 个状态都是不可能运行服务的,因此这3个状态只能设置为关

- ls 查看 /etc/init.d 目录
- 使用 cp network 123 把network文件复制一份,并更名为123
- 再ls 查看,能够看到多了一个 123文件
- 如今要把 123 脚本加入到 chkconfig 里面运行

- 如图 chkconfig --addd 123 这样就能够把123脚本加入chkconfig了
- chkconfig --list 查看运行的服务
- 能够看到,多了 123 服务
- 使用 vim 打开 123 文件

- 自定义加入 chkconfig 的脚本文件,必须符合特定的格式才行
- 如图 ! /bin/bash 表示这是shell脚本
- 而后 chkconfig: 2345 10 90
- 2345表示在这些运行级别能够运行
- 10表示运行顺序,第10位运行
- 90表示 第90位关闭
- description 表示 脚本描述
- chkconfig 和 description 信息都是必需要有的
- 这样文件才能被 chkconfig 识别

- 能够添加服务,也能够删除服务
- 使用 chkconfig --del 123 就能够把123服务从chkconfig删除
- 使用 chkconfig --list 查看
- 能够看到 123 服务没有了
- chkconfig 主要是用在 旧版本的centOS 上面的
- 从 centOS 7 开始已经再也不使用了
systemd管理服务
- 从 centOS7 开始,系统服务的管理工具是 systemd

- 如图,使用 systemctl list-unit-files 查看全部服务

- 如图,查看全部服务,不仅有service,还有socket,target等进程

- 除了 systemctl list-unit-files 能够查看服务外
- 还可使用 systemctl list-units --all --type=service 查看进程
- 这条命令主要是查看 service 类型的进程

- 如图,列出的全部进程都是service类型的
- 最右边一列,是进程的描述信息
- 若是不使用参数 --all
- systemctl list-units --type=service

- 如图,能够看到,把 --all 参数去掉后
- 列出来的 service ,在ACTIVE那一列都是 active 的状态,表示在运行
- 若是使用 --all,就会把状态为 inactive 的service 也列出来
- inactive 表面没有在活动的状态

- 如图,systemctl enable crond 或者 crond.service
- crond 能够加 .service 也能够不加
- 这条命令可让 crond 服务开机启动
- systemctl diable crond 能够关闭该服务的开机启动

- 如图,systemctl status crond.service
- 能够查看 crond 服务的状态
- 能够看到,如今是 active 状态
- systemctl stop crond 能够中止crond 服务
- systemctl start crond 能够启动crond 服务
- systemctl restart crond 能够重启crond 服务

- 如图,systemctl is-enabled crond 检测crond服务是否开机启动
- 能够看到,下面显示 enabled 表示 是开机启动
- 而后 disable crond 服务
- 再检测一遍,下面显示 disabled 表示 不是开机启动

- 如图,使用命令 systemctl enable crond 的时候
- 下面有一些输出信息,包含了配置文件的地址
- cat /etc/systemd/system/multi-user.target.wants/crond.service
- 能够看到 crond 服务的配置文件的内容
- 使用 ls -l /etc/systemd/system/multi-user.target.wants/crond.service
- 能够看到,这个文件是 /usr/lib/systemd/system/crond.service 的软连接

- 如图,systemctl disable crond 把 crond 服务设置为 disable
- 再使用 ls -l /etc/systemd/system/multi-user.target.wants/crond.service
- 查看 /etc/systemd/system/multi-user.target.wants/crond.service 的信息
- 发现 /etc/systemd/system/multi-user.target.wants/crond.service 软连接不见了
- 系统判断一个服务是否开机启动,就是根据这个软连接来的
- 若是把一个服务设置为 enable 开机启动
- /etc/systemd/system/multi-user.target.wants/ 这个目录下面就会建立软连接
- 若是把服务设置为 disable
- /etc/systemd/system/multi-user.target.wants/ 目录下面的软连接就会被删除
- 系统能够根据这个软连接是否存在判断服务的状态
unit介绍

- ls /usr/lib/systemd/system 能够看到系统里面全部的 unit
- 如图,unit 分为不一样的类型

- 上图是一些关于 unit 的命令
- systemctl list-units 列出正在运行的unit
- 如图加入 --all 参数
- 会把全部的 unit 都列出来,包括失败或者inactive
- 参数 --state=inactive 能够指定状态
- 这里指定了状态为 inactive 的unit才会被列出来
- 由于默认就是列出 active 的 unit
- 因此 active 不须要用 --state来指定
- 除了 active 之外的别的状态会须要用到 --state 来指定
- systemctl list-units --all --state=inactive
- 命令表示先列出全部unit,再筛选出state为 inactive 的 unit
- systemctl list-units --type=service
- 参数 --type=service 能够指定 unit 的类型
- 这里 指定了 service 类型
- 由于 systemctl list-units 会列出全部状态为 active 的unit
- 加上 --type=service 就会再把 unit类型为service 的 unit 筛选出来
- systemctl is-active crond.service
- 这条命令能够检测 crond 服务是否为 active

- 如图,active 表示服务检测结果为 active
- systemctl is-enabled crond.service
- 能够检测 crond 服务是否开机启动
- 返回 enabled 表示 是开机启动
target介绍

- systemctl list-unit-files --type=target 能够查看系统全部的target文件
- target 是由多个 unit 组成的
- systemctl list-dependencies multi-user.target
- 能够查看 multi-user.target 下面有哪些 unit

- 能够看到,multi-user.target 下面有不少 service 文件
- 也有 path 文件,还有一些别的 unit 类型文件在里面
- 这些 unit 组成了 multi-user-target

- 如图,target 文件里面也能够包含 target 文件

- 如图 systemctl get-default 返回 multi-user.target
- 这条命令能够返回 系统默认的target名称
- 这里系统默认的 target 就是 multi-user.target
- 经过更改默认的 target 就至关于在centOS7里面修改运行级别
- 好比 multi-user.target 就表示多用户的运行级别

- systemctl set-default multi-user.target 能够设置默认 target
- 下面是系统输出的信息
- /etc/systemdd/system/default.target 是从新设置默认target后
- 系统从新建立的 默认target文件

- 如图,使用 ls -l /etc/systemdd/system/default.target 查看详细信息
- 发现 /etc/systemdd/system/default.target 是一个软连接文件
- 连接对象是 /usr/lib/systemd/system/multi-user.target
- 若是设其它 target 做为默认的 target
- 系统就会从新建立一个新的软连接,连接对象也会改变

- 一个target里面可能包含不少service文件
- 怎么查看某个service属于哪一个target文件呢?
- 如图,cat /usr/lib/systemd/system/sshd.service 查看 sshd.service内容
- 找到 [Install] 信息
- WantedBy=multi-user.target 表示这个service属于multi-user.target
欢迎关注本站公众号,获取更多信息