linux任务计划cron

linux任务计划:在某个时间自动执行命令或者脚本。

任务计划的配置文件 cat /etc/crontab

前面两行是定义变量,第三行是指发送邮件给谁,然后最后一行有五个*(星号)分别对应着五个位,也就是上面的五行,下面来介绍一下分别表示什么意思:

1.表示分钟(0-59)

2.表示小时(0-23)

3.表示日期(1-31)

4.表示月份(1-12可以写数字或者英文的简写)

5.表示星期(0-6,0或者7表示周日,也可以写成英文的简写)

最后一行开头部分是用户(在root用户下不写默认就是root)

后面部分,也就是com开头的位置是你要执行的命令。

自定义任务计划(用法和vim一样) crontab -e

案例:每天3点执行123.sh脚本(星号就是所有,比如第三个是 意思就是1-31日都执行) 0 3 * * * /bin/bash /usr/local/sbin/123.sh

把正确的结果和错误的结果都输出到123.log里 0 3 * * * /bin/bash /usr/local/sbin/123.sh >/tmp/123.log 2>/tmp/123.log

把正确的结果和错误的结果都追加到123.log里 0 3 * * * /bin/bash /usr/local/sbin/123.sh >>/tmp/123.log 2>>/tmp/123.log

每隔两个月的1-10号的星期二和星期五的三点 可以写成如下格式。0是分钟,3是小时,1-10是日期1号到10号,星号/2是月份除以2可以整除的那个月份,2,5是这个月的周二和周五 0 3 1-10 */2 2,5

设置好之后我们还需要使用systemctl start crond命令启动cron才能启用计划 systemctl start crond

查看是否启用计划 ps aux |grep crom

或者使用systemctl start crom(crom是你的计划名,图片中红色的就是计划名) systemctl start crom

绿色就代表已经启用了)

有时候计划了执行脚本,但是没有执行很可能是没有使用绝对路径,解决办法要么在计划里把该条命令的路径添加到PATH里,要么就使用绝对路径。

还有就是建议计划的任务都要写上正确和错误的结果追加到某个文件里,这样才能保证任务有据可查。

-l 列出,查看任务计划列表 crontab -l

任务计划cron的文件在/var/spool/cron/目录下,如果是root的cron就是/var/spool/cron/root(cat查看)

-r删除计划 crontab -r

-u指定用户 crontab -u root -l(指定查看root的任务计划)

chkconfig服务管理工具

chkconfig服务管理工具(主要在centos6及以前的系统中使用,如怎么控制服务启动,如何控制服务开机启动、如何控制服务在指定级别启动等等)

查看当前系统中使用chkconfig的服务(只会列出sysv服务管理模式的进程,centos7很多的都是systemd模式的) chkconfig --list

使用如上命令在centos7只能查看到两个服务,如下图

这两个进程文件在如下路径(之后我们可以脚本放到这个目录里用chkconfig工具管理也是可以的) ls /etc/init.d/

表示该服务在0-6级别分别是什么状态,开机启动还是关闭(network是需要关闭或开启的服务名,off是关闭on是开启) chkconfig network off

0-6这七个级别,每个级别的含义

0级别是关机状态、1级别是单用户、2是多用户模式(没有nfs服务)、3是是用户模式(不带图形)、4保留的级别、5多用户模拟(带图形)、6重启

指定network的3级别关闭 chkconfig --level 3 network off

指定network的3级别和5级别关闭(3跟5中间不加任何符号,也不加空格) chkconfig --level 35 network off

把123加入到服务列表里来(需要把123放到/etc/init.d目录下来,并且确定123是个脚本,同是需要有如下两行格式才能识别) chkconfig --add 123

从服务列表删除 chkconfig --del 123

systemd管理服务

systemd是centos7的管理服务的机制。

列出systemd模式的服务 systemctl list-units --all --type=service

让服务开机启动,service是服务名(显示出来的是软连接,然后ls这个软连接就可以得到服务的文件地址) systemctl enable crond.service

不让服务开机启动,service是服务名 systemctl disable crond.service

查看服务状态,service是服务名 systemctl status crond.service

停止服务,service是服务名 systemctl stop crond.service

启动服务,service是服务名 systemctl start crond.service

重启服务,service是服务名 systemctl restart crond.service

检查服务是否开机启动,service是服务名(enabled就是启动) systemctl is-enabled crond.service

unit介绍

上一节课里systemctl enable crond获得的服务文件所在目录,也就是ls /usr/lib/systemd/system,目录里的所有文件都叫做unit。

unit主要分为一下几种类型。

service 系统服务

target 多个unit组成的组

device 硬件设备

mount 文件系统挂载点

automount 自动挂载点

path 文件或路径

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

slice 进程组

snapshot systemd快照

socket 进程间通信套接字

swap swap文件

timer 定时器

unit相关的命令 列出正在运行的unit systemctl list-units

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

列出inactive的unit systemctl list-units --all --state=inactive

列出状态为active的service systemctl list-units --type=service

查看某个服务是否为active systemctl is-active crond.service

target介绍

系统为了方便管理用target来管理unit

查看所有target。 systemctl list-unit-files --type=target

查看指定target下面有哪些unit。 systemctl list-dependencies multi-user.target

查看系统默认的target。 systemctl get-default

设置默认的target。 systemctl set-default multi-user.target

一个service属于一种类型的unit 多个unit组成了一个target 一个target里面包含了多个service

查看指定sevice属于那个target。(看install位置) cat /usr/lib/systemd/system/sshd.service