在LINUX中,周期执行的任务一般由cron这个守护进程来处理。cron的配置文件称为“crontab”,是“cron table”的简写。
1.管理命令
【RedHat/CentOS】
etc/init.d/crond start
etc/init.d/crond reload
...
service crond start //启动服务
service crond stop //关闭服务
service crond restart //重启服务
service crond reload //重新载入配置
service crond status //查看服务状态
【Debian】
etc/init.d/cron start
/etc/init.d/cron reload
...
2.用户定时任务文件。/var/spool/cron/<用户名>
例:
/var/spool/cron/root
/var/spool/cron/userA
/var/spool/cron/userB
3.查看运行日志(debian默认不开启):
tail -f /var/log/cron
crontab执行日志的记录
tail -f /var/spool/mail/root #未验证
tail -f /var/spool/mail/mail #已验证
4.系统级配置文件crontab。
负责安排由系统管理员制定的维护系统以及其他任务的crontab
vim /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# 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
# run-parts
01 * * * * root run-parts /etc/cron.hourly
SHELL指定系统要使用的shell,这里是bash。
PATH指定了系统执行命令的路径。
MAILTO指定了crond的任务执行信息将通过电子邮件发送给root用户,如果MAILTO变量的值为空,则表示不发送。
HOME变量指定在执行命令或者脚本时使用的主目录。
01 * * * * root run-parts /etc/cron.hourly:
五个数字后面接的是 root ,代表『执行的级别为root身份』。
run-parts代表后面接的 /etc/cron.hourly 是『一个目录内(/etc/cron.hourly)的所有可执行文件』。
每个小时的01分,系统会以root身份去/etc/cron.hourly这个目录下执行所有可执行的文件!
还可以将每天需要执行的命令直接写到/etc/cron.daily即可,不需要使用到crontab -e的程式
5.语法
查看当前用户的定时任务
crontab -l
crontab [-u username] [-l|-e|-r]
选项与参数:
-u :只有 root 才能进行这个任务,亦即帮其他使用者创建/移除 crontab 工作排程;
-e :编辑 crontab 的工作内容
-l :查阅 crontab 的工作内容
-r :移除所有的 crontab 的工作内容,若仅要移除一项,请用 -e 去编辑
6.编写crontab任务
每小时的第1分钟,执行/etc/cron.hourly内的脚本
01 * * * * root run-parts /etc/cron.hourly
每天4:02,执行/etc/cron.daily内的脚本
02 4 * * * root run-parts /etc/cron.daily
每星期日4:22,执行/etc/cron.weekly内的脚本
22 4 * * 0 root run-parts /etc/cron.weekly
每月1日4::42,去执行/etc/cron.monthly内的脚本
42 4 1 * * root run-parts /etc/cron.monthly
注意: "run-parts"这个参数了,如果去掉这个参数的话,后面就可以写要运行的某个脚本名,而不是文件夹名。
代码 | 释义 |
---|---|
* * * * * | 每分钟执行1次 |
*/10 * * * * | 每10分钟执行1次 |
3,15 * * * * | 每分钟执行1次 |
每天早上6点 //注意单纯echo,从屏幕上看不到任何输出,因为cron把任何输出都email到root的信箱了。
0 6 * * * echo "Good morning." >> /tmp/test.txt
每两个小时
0 */2 * * * echo "Have a break now." >> /tmp/test.txt
晚上11点到早上8点之间每两个小时和早上八点
0 23-7/2,8 * * * echo "Have a good dream" >> /tmp/test.txt
7.权限
crontab权限问题到/var/adm/cron/下一看,文件cron.allow和cron.deny是否存在
/etc/cron.deny 不允许使用crontab命令的用户
/etc/cron.allow 允许使用crontab命令的用户
用法如下:
1、两个文件都不存在,则只有root用户才能使用crontab命令。
2、cron.allow存在但cron.deny不存在,则只有列在cron.allow文件里的用户才能使用crontab命令,如果root用户也不在里面,则root用户也不能使用crontab。
3、如果cron.allow不存在, cron.deny存在,则只有列在cron.deny文件里面的用户不能使用crontab命令,其它用户都能使用。
4、如果两个文件都存在,则列在cron.allow文件中而且没有列在cron.deny中的用户可以使用crontab,如果两个文件中都有同一个用户,以cron.allow文件里面是否有该用户为准,如果cron.allow中有该用户,则可以使用crontab命令。
AIX 中 普通用户默认都有 crontab 权限,如果要限制用户使用 crontab ,就需要编辑/var/adm/cron/cron.deny
HP-UNIX 中默认普通用户没得crontab 权限 ,要想放开普通用户的crontab 权限可以编
crond服务的最低侦测限制是分钟, cron 每分钟去读取一次 /etc/crontab
与 /var/spool/cron
里面的数据。
因此,只要编辑储存 /etc/crontab
这个文件, cron 的配置就自动的会来运行了。
没有马上的执行,可以用 service crond restart
重启.
Linux下的crontab定时执行任务命令详解 https://www.cnblogs.com/longjshz/p/5779215.html
查看crontab运行日志 https://www.landui.com/help/show-9867.html
在线工具 https://tool.lu/crontab/
【Linux工具快速教程】crontab 定时任务 https://linuxtools-rst.readthedocs.io/zh_CN/latest/tool/crontab.html
crontab的原理 http://caibaojian.com/crontab.html