计划任务,是任务在约定的时间执行已经计划好的工作。在 Linux 中,cron 服务可以根据配置文件约定的时间来执行特定的作务。

# crontab 命令选项

crontab [-u user] file  
crontab [-u user] <-l, -r, -e>

说明:
crontab 是用来让使用者在固定时间或固定间隔执行程序之用,-u user 是指设定指定 user 的计划任务,这个前提是你必须要有其权限 (比如说是 root) 才能够指定他人的计划任务。如果不使用 -u user 的话,就是表示设定自己的计划任务。

参数:
-l 列出某个用户的计划任务
- r 删除某个用户的计划任务
- e 编辑某个用户的计划任务

# cron 文件语法

可用 crontab -e 命令来编辑,编辑的是 /var/spool/cron 下对应用户的 cron 文件,也可以直接修改 /etc/crontab 文件。具体格式如下:

# 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
	
Minute 每个小时的第几分钟执行该任务
Hour 每天的第几个小时执行该任务
Day 每月的第几天执行该任务
Month 每年的第几个月执行该任务
Week 每周的第几天执行该任务,0表示周日
Command 指定要执行的程序、脚本或命令

除了 Command 是必须指定的字段以外,其它字段皆为可选。对于不指定的字段,要用 “*” 来填补其位置。

“*”代表取值范围内的数字,
“/”代表”每”,
“-”代表从某个数字到某个数字,
“,”分开几个离散的数字

# 常见 cron 示例

10 * * * * command        #每小时的第 10 分钟执行一次 command
30 5 * * * command        #每天的 5:30 执行 command 
30 7 8 * * command        #每月 8 号的 7:30 分执行 command
30 5 8 6 * command        #每年 6 月 8 日 5:30 执行 command
30 6 * * 0 command        #每星期日的 6:30 执行 command
30 3 2,3 * * command      #每月 2 号及 3 号的 3:30 执行 command
25 8-11 * * * command     #每天 8-11 点的第 25 分钟执行 command
*/15 * * * * command      #每 15 分钟执行一次 command
30 6 */10 * * command     #每个月每隔 10 天 6:30 执行 command (即每月的 1、11、21、31 日)

# cron 配置

cron 的主配置文件是 /etc/crontab,它包括下面几行:

SHELL=/bin/bash 
PATH=/sbin:/bin:/usr/sbin:/usr/bin 
MAILTO=root 
HOME=/ 
    
#run-parts
01 * * * * root run-parts /etc/cron.hourly 
02 4 * * * root run-parts /etc/cron.daily 
22 4 * * 0 root run-parts /etc/cron.weekly 
42 4 1 * * root run-parts /etc/cron.monthly

前四行是用来配置 cron 任务运行环境的变量:
1.SHELL 变量的值告诉系统要使用哪个 shell 环境(在这个例子里是 bash shell);
2.PATH 变量定义用来执行命令的路径;
3.MAILTO 变量定义 cron 任务输出被邮件通知的用户名(如果 MAILTO 变量被定义为空白字符串(MAILTO=""),电子邮件就不会被寄出);
4.HOME 变量可以用来设置在执行命令或脚本时使用的主目录。

run-parts 用来执行 /etc/cron.hourly、/etc/cron.daily、/etc/cron.weekly 和 /etc/cron.monthly 目录中的脚本,这些脚本被相应地每小时、每日、每周或每月执行。这些目录中的文件应该是 shell 脚本。

使用者权限文件:

/etc/cron.deny    #该文件中所列用户不允许使用 crontab 命令
/etc/cron.allow   #该文件中所列用户允许使用 crontab 命令
/var/spool/cron/  #所有用户 crontab 文件存放的目录,以用户名命名

# 注意事项

1. 脚本中涉及文件路径时写全局路径;

2. 脚本执行要用到 java 或其他环境变量时,通过 source 命令引入环境变量

cat start_cbp.sh
#!/bin/sh
source /etc/profile
export RUN_CONF=/home/d139/conf/platform/cbp/cbp_jboss.conf
/usr/local/jboss-4.0.5/bin/run.sh -c mev &

3. 手动执行脚本 OK,但是 crontab 不执行时可以尝试在 crontab 中直接引入环境变量解决问题

0 * * * * . /etc/profile;/bin/sh /var/www/restart_audit.sh

4. 注意清理系统用户的邮件日志,如果想忽略日志输出:

0 */3 * * * /usr/local/apache2/apachectl restart >/dev/null 2>&1

说明:/dev/null 可以理解为黑洞,可以无限往里面扔垃圾,所以这个相当于不输出了。1 是标准输出,2 是标准错误输出,2>&1 的意思是将错误输出的内容也输出到标准输出流中,就是说将该脚本所有的输出都送到标准输出流中。

5. 谨慎执行 crontab -r,它会从 Crontab 目录(/var/spool/cron)中删除用户的 Crontab 文件,删除了该用户的所有 crontab 都没了。

6. 在 crontab 中 % 是有特殊含义的,表示换行的意思。如果要用的话必须进行转义 %,如经常用的 date‘+% Y% m% d’在 crontab 里是不会执行的,应该换成 date‘+% Y% m% d’。

此文章已被阅读次数:正在加载...更新于

请我喝杯咖啡吧☕️

木亦 微信支付

微信支付

木亦 支付宝

支付宝