侧边栏壁纸
博主头像
与晚风述往事博主等级

万般皆下品,唯有读书高。

  • 累计撰写 149 篇文章
  • 累计创建 29 个标签
  • 累计收到 7 条评论

目 录CONTENT

文章目录

cron、crontab和crontabs的用法

与晚风述往事
2021-11-11 / 0 评论 / 1 点赞 / 254 阅读 / 1,726 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2022-01-06,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

介绍

cron是一个守护程序(后台进程),其作用是定期执行指定的命令。

crontab是一个程序,其作用是用于修改和删除一个列表,该列表是用户配置的定时命令,并且每个用户都可以有自己的crontab列表。除了使用crontab程序外,还可以手动去修改/etc/cron.d/目录下的cron作业。

crontabs是配置定时作业的一套规则。除普通配置外,crontabs还可以配置/etc/sysconfig/run-parts文件的随机化,随机化可以简单的理解为随机执行命令。随机化通常会用在共享网络中,在共享网络中,如果配置多个cron作业,可能会影响到服务器网络流量。

原理

CentOS默认会启动cron服务,这个是怎么启动的,暂时没找到相关资料。

在cron服务启动后,会去搜索/var/spool/cron目录下的文件,然后跟/etc/passwd文件中的用户名去对比,如果一致,则将同名文件中的内容加载到内存中。除此之外,还会搜索/etc/crontab和/etc/cron.d目录下的文件。

cron服务在执行定时的任务后,会将输出信息通过邮件发送到crontab的拥有者,也就是/var/mail目录下的同用户名文件。

crontab在修改后,不需要手动重启cron服务,因为cron服务会在每分钟检查spool目录和/etc/crontab的modtime(文件修改时间),如果modtime发生过变化,cron服务就检查所有的crontab文件modtime,然后重新加载所有已改变的文件。

限制

crontab可以配置cron.allow和cron.deny文件来限制用户使用。cron.allow文件中配置哪些用户能够访问,而cron.deny刚好相反,配置哪些用户不能访问。配置有三种情况:

  • 如果cron.allow文件存在,则必须在其文件中列出用户,该用户才能使用cron服务。
  • 如果cron.allow文件不存在但cron.deny文件存在,则列在cron.deny文件中的用户就不能再使用cron服务。
  • 如果这两个文件都没有,则仅超级用户root能够使用cron服务。

除此之外,还可以配置/etc/security/access.conf来控制使用cron服务的用户。

crontab语法

指令 描述 备注
-u 指定修改crontab的用户名
-l 列出当前用户的crontab
-r 移除当前用户的crontab
-e 编辑当前用户的crontab列表 使用的编辑器是由VISUAL或EDITOR环境变量指定
-i 指定删除crontab时需二次确认 此选项需跟-r一起使用,输入Y/y确认删除
-s 指定编辑之前是否将SELinux安全context字符串附加到crontab文件中 此选项需跟-e一起使用,会在编辑中默认添加SELinux上下文
-c 跟集群有关,待学习 此选项需跟-c一起使用
-n 跟集群有关,待学习 此选项需跟-c一起使用

crontabs规则

建议在配置crontabs规则时,将脚本的结果重定向到/dev/null中。这样做的好处就是避免随时间的增加,脚本执行次数过多,导致/var/spool/mail中的文件变得很大。
&> /dev/null

# .---------------- 第一个*代表分钟(0 - 59),每小时的X分执行
# |  .------------- 第二个*代表小时 (0 - 23),每天的第X小时执行
# |  |  .---------- 第三个*代表天数 (1 - 31),每月的第X天执行
# |  |  |  .------- 第四个*代表月份 (1 - 12),每年的第X月执行
# |  |  |  |  .---- 第五个*代表星期 (0 - 6),每周的星期X执行,0代表星期日
# |  |  |  |  |
# *  *  *  *  * user-name  command to be executed

示例

说了这么多,不如实际使用一下。

我这里有个文件test.sh,里面就是简单的打印一句“执行成功”。接下来配置每分钟执行一次。

配置crontabs

[root@localhost ~]# crontab -e

* * * * * /root/test.sh

等待中。。。。。。

经过一分钟的等待后,再次回车刷新控制台就能看到新邮件了。
image.png

查看邮件文件,就能看到执行情况。
image.png

1

评论区