欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

crontab使用时间参数

程序员文章站 2022-04-13 14:11:02
...

 最近写了一个脚本,需要定时执行,决定使用Crontab。

一、问题描述

 由于脚本需要传入时间参数,传入时间时发生了不能执行的问题,如下。
刚开始写的调用脚本为

20 0 * * * source ~/.bash_profile;cd */shell;sh count.sh $(date +%Y%m%d)> count.log 2>&1

定时执行不能执行,查看系统日志后,发现错误位置在$(date。

二、问题解决

 看了网上发现问题所在。原因应该是,任务调度中,%是个特殊字符,表示特殊含义,有换行的意思。所以不能直接使用%,而需要添加反斜杠来进行转义。
修改后的调用脚本为

20 0 * * * source ~/.bash_profile;cd */shell;sh count.sh $(date +"\%Y\%m\%d")> count.log 2>&1^C

然后问题解决了。

三、拓展

 既然用到了crontab,就简单的学习一下吧。

1.时间参数说明

20 0 * * *
从左到右依次为:
[分钟] [小时] [每月的某一天] [每年的某一月] [每周的某一天] [执行的命令]
该参数的意义为:每天的0点20分执行脚本
星号(*):代表所有可能的值,例如month字段如果是星号,则表示在满足其它字段的制约条件后每月都执行该命令操作
逗号(,):可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9”
中杠(-):可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6”
正斜线(/):可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。同时正斜线可以和星号一起使用,例如*/10
@reboot 系统重启时执行

2.添加/编辑 Crontab

crontab [-u username] -e
默认情况下,系统会编辑当前用户的crontab命令集合

3.查看Crontab

crontab [-u username] -l

4.删除Crontab

crontab [-u username] -r
慎用。可以直接crontab -e 进行编辑

5.载入

crontab [-u user] file
将file做为crontab的任务列表文件并载入crontab
如果在命令行中没有指定这个文件,crontab命令将接受标准输入(键盘)上键入的命令,并将它们载入crontab。

6.Crontab服务

service crond start    //启动服务
service crond stop     //关闭服务
service crond restart  //重启服务
service crond reload   //重新载入配置
service crond status   //查看服务状态

7.目录

/etc/cron.d/
这个目录用来存放任何要执行的crontab文件或脚本。

8.注意事项

1)脚本中涉及文件路径时写全局路径
2)脚本执行要用到java或其他环境变量时,通过source命令引入环境变量
3)新创建的cron job,不会马上执行,至少要过2分钟才执行。如果重启cron则马上执行。
相关标签: crontab