摘要
很多时候我们需要使用linux下的crontab来执行一些定时任务。平时研究linux比较少,今天把遇到的问题整理了下分享。
crontab简单介绍
1.常用命令
crontab -e 编辑添加定时信息
crontab -l 列表出当前所有的定时任务
crontab -r 删除任务
2.使用实例
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
分 时 日 月 周 命令
第1列表示分钟1~59 每分钟用*或者 */1表示
第2列表示小时1~23(0表示0点)
第3列表示日期1~31
第4列表示月份1~12
第5列标识号星期0~6(0表示星期天)
第6列要运行的命令
实例1:每1分钟执行一次myCommand
*/1 * * * * user-name command to be executed
* * * * * myCommand ---这个没实际测试过
实例2:每小时的第3和第15分钟执行
3,15 * * * * myCommand
实例3:在上午8点到11点的第3和第15分钟执行
3,15 8-11 * * * myCommand
实例4:每隔两天的上午8点到11点的第3和第15分钟执行
3,15 8-11 */2 * * myCommand
实例5:每周一上午8点到11点的第3和第15分钟执行
3,15 8-11 * * 1 myCommand
**实例6:每晚的21:30重启
**
30 21 * * * /etc/init.d/smb restart
实例7:每月1、10、22日的4 : 45重启
45 4 1,10,22 * * /etc/init.d/smb restart
实例8:每周六、周日的1 : 10重启
10 1 * * 6,0 /etc/init.d/smb restart
实例9:每天18 : 00至23 : 00之间每隔30分钟重启
0,30 18-23 * * * /etc/init.d/smb restart
实例10:每星期六的晚上11 : 00 pm重启
0 23 * * 6 /etc/init.d/smb restart
实例11:每一小时重启
* */1 * * * /etc/init.d/smb restart
实例12:晚上11点到早上7点之间,每隔一小时重启
0 23-7 * * * /etc/init.d/smb restart
以上实例中我们很容易分析出这里包含了那些符号来分割时间。下面将是非常重要 注意环境变量问题
我们创建了一个crontab,但是这个任务却无法自动执行,而手动执行这个任务却没有问题,这种情况一般是由于在crontab文件中没有配置环境变量引起的。
crontab不属于任何用户,所以我们在脚本执行要用到java或其他环境变量,脚本中涉及文件路径时写全局路径。
test.sh,可以这样创建一个sh文件来执行。
!/bin/sh
source /etc/profile
export RUN_CONF=/home/platform/cbp/cbp_jboss.conf
/usr/local/jboss-4.0.5/bin/run.sh -c mev &
或者可尝试在crontab中直接引入环境变量解决问题
0 * * * * . /etc/profile;/bin/sh /var/www/java/audit_no_count/bin/restart_audit.sh
可以在sh脚本中加入 source /etc/profile 来配置环境变量。