众妙之门

业精于勤,荒于嬉;行成于思,毁于随

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

在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.服务重启
  1. /etc/init.d/crond restart
  2. 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脚本属性,赋予执行权限

chmod 600 /opt/mysqlBackup.sh
chmod +x /opt/mysqlBackup.sh
 
查看任务执行情况

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/

posted on 2021-09-14 10:04  xuanm  阅读(540)  评论(0编辑  收藏  举报