沙滩星空的博客沙滩星空的博客

Linux下的crontab定时任务命令

在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"这个参数了,如果去掉这个参数的话,后面就可以写要运行的某个脚本名,而不是文件夹名。


crontab用法示例

代码释义
* * * * *每分钟执行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
未经允许不得转载:沙滩星空的博客 » Linux下的crontab定时任务命令

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址