共计 1378 个字符,预计需要花费 4 分钟才能阅读完成。
要执行周期性任务,要保证服务运行。服务名为 crond;service crond start ; systemctl start crond;
配置文件
/etc/crontab
cron 的日志文件
cat /var/log/cron
crond 是 linux 下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,与 windows 下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动 crond 进程,crond 进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。
Linux 下的任务调度分为两类,系统任务调度和用户任务调度。
系统任务调度:系统周期性所要执行的工作,比如写缓存数据到硬盘、日志清理等。在 /etc 目录下有一个 crontab 文件,这个就是系统任务调度的配置文件。
通过编辑配置文件 /etc/crontab,以下图的格式标明需要运行的时间即可。一行对应一个任务,格式如下图。
在当前用户下使用命令 crontab -e,会以当前用户的身份建立任务调度。与系统任务调度文件格式不同的是不需要指名以哪个用户的身份运行。
指定值:指定具体的数字
范围值:* 表示每,每到这这个时间段执行一次任务。
离散取值:10 2,3,4 * * *;每天的 2,3,4 点的 10 分执行一次。(总共执行了 3 次)
连续范围:10 2-10 * * *;每天的 2 点 10 分到 10 点 10 分分别执行 (总共执行了 8 次)
步长范围:/3 * *;每分钟内执行 3 次 (即每 20 秒执行一次)
举例:
10 10 /6 * *;每 6 天的 10 点 10 分执行一次任务
日期与星期
10 10 1-10 * 0,6 #每个月的 1 -10 号的 10 点 10 分,或者周六日的 10 点 10 分都执行
举例:
1 1 /6 * root echo “hello word ”;每隔 6 天的 1 点 1 分执行一次任务。
1 1-10/3 * * * root echo“hello word”;在每天 1 -10 点范围内每 3 小时内的第一分钟执行一次
crontab -e
* * * * * /bin/echo “`date +\%F \%H:\%M:\%S`”
# 命令要写绝对路径。除非标明变量
# 如果在用户下新建 crontab 的话 % 需要转义
创建周期性任务时,默认的编辑器为 vi 所以没有语法高亮。可以通过以下办法将默认编辑器修改为 vim
# 写入 /etc/porfile.d 对所有用户生效
# 写入~/bash_profile 对当前用户
export EDITOP=vim
允许指定用户创建任务
cat /etc/cron.deny #在文件内写入用户名,使其不能创建新任务,但已创建的依然会执行
拒绝指定用户创建任务
cat /etc/cron.allow #默认文件不存在
允许与拒绝优先级
如果 allow 文件存在,那么 deny 文件不生效。
如果 allow 为空,拒绝所有用户
如果 allow、deny 都不存在,任何用户不能创建计划任务
利用 usleep 实现微妙级别的运行
usleep 1000000;1 秒
usleep 1000;1 毫秒
usleep 1;1 微秒
利用循环体加 sleep 实现秒级别的。在每分钟要执行的任务中 sleep20 秒。