在centos上最常用的定时任务应该就是crontab了,在经过各种度娘之后有三种方式实现定时任务的方法,但是所用到的场景有所不同
at 适合仅执行一次就结束的调度命令,需要启动一个后端的atd服务。
crontab 需要启动一个服务crond才行,crond服务通过crontab命令实现
anacron 无法周期性执行,只能以天为周期,但有个特点,在关机状态下未>执行的任务,下次开机时可以补上执行
这里也直讲最常用的crontab,主要其他两种我也没看也没测试
关于crontab和crond
用到crontab那么就一定要知道crond,crond和crontab是不可分割的,crond我的理解是一个守护进程,或者说这才是我们定时任务的核心,crontab是一个编辑或者说是管理定时任务的工具
crontab我的理解就是crond服务处于启动状态,这个服务会默认每分钟去检测是否有需要执行的定时任务,所以crond不能守护秒级定时任务。而这个任务的具体内容是通过crontab来管理的,至于具体管理方式后面继续讲
关于crond和crondtab常用命令
crond常用命令
systemctl start crond 启动服务
systemctl stop crond 停止服务
systemctl restart crond 重启服务
systemctl reload crond 重载配置文件
systemctl status crond 查看状态
crontab常用命令
crontab -u 设定某个用户的cron服务
crontab -l 显示crontab文件(显示已设置的定时任务)
crontab -e 编辑crontab文件(编辑定时任务)
crontab -r 删除crontab文件(删除定时任务)
crontab -i 删除crontab文件提醒用户(删除定时任务)
当前有两种方式设置
/etc/crontab和crontab -e,两种的区别
1、格式不同
前者
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
如增加
0 2 * * * root /root/mysqlbak/mysqlBackup.sh >> /root/mysqlbak/aa.txt
表示每天2点执行,并把执行的输出到指定的文件
后者
#50 1 * * * command
2、使用范围
修改/etc/crontab这种方法只有root用户能用,这种方法更加方便与直接直接给其他用户设置计划任务,而且还可以指定执行shell等等,
crontab -e这种所有用户都可以使用,普通用户也只能为自己设置计划任务。然后自动写入/var/spool/cron/usename
3.服务重启
- /etc/init.d/crond restart
- service crond restart
1、crontab 会进行语法检查,vi 不会
2、听说有些 os 的 crond 不会重读配置,所以用 service 重启
crontab -e是某个用户的周期计划任务;/etc/crontab是系统的周期任务
1. crontab -e 与 /etc/crontab 修改语法格式不一样,后者多一个 user 指定
2. 不管用 crontab -e or 改 /etc/crontab 都不需要重新启动 crond 服务
01 22 * * * /sbin/shutdown -h now
执行的结果都是一样, 一般LINUX 都用shutdown -h now 也可以init 0
init 0在UNIX用得比较多,
关机需要root的身份在可以执行,
lz可以选取方法操作
方法1
换到root 的身份
su - root
crontab -e (按a增加下)
01 22 * * * /sbin/shutdown -h now (或01 22 * * * /sbin/init 0)
保存退出即可以
方法2
vi /etc/crontab 在里面插入
01 22 * * * root /sbin/shutdown -h now
或 01 22 * * * root /sbin/init 0
2、如果要执行,还需要修改shell脚本属性,赋予执行权限
1. linux
看 /var/log/cron.log这个文件就可以,可以用tail -f /var/log/cron.log观察
2. unix
在 /var/spool/cron/tmp文件中,有croutXXX001864的tmp文件,tail 这些文件就可以看到正在执行的任务了。
3. mail任务
在 /var/spool/mail/root 文件中,有crontab执行日志的记录,用tail -f /var/spool/mail/root 即可查看最近的crontab执行情况。
参考:
https://www.cnblogs.com/xd502djj/p/4292781.html
https://www.cnblogs.com/SunArmy/p/13096861.html
https://www.shuzhiduo.com/A/LPdolVbOz3/