Linux crontab 的用法

本文详细介绍了CronTab的基本语法及其使用方法,包括如何设置周期性任务、使用不同的编辑方式来管理定时任务等,并提供了多个实用的例子。
 

crontab task 格式

* * * * * task
分 时 日 月 周 task

第1列 分钟1~5 9 (0表示0分)
第2列 小时1~2 3(0表示子夜)
第3列 日1~3 1
第4列 月1~1 2
第5列 星期0~6(0表示星期天)
第6列 要运行的命令

一些例子:
30 21* * * /apps/bin/cleanup.sh
上面的例子表示每晚的2 1 : 3 0运行/ a p p s / b i n目录下的c l e a n u p . s h。
45 4 1,10,22 * * /apps/bin/backup.sh
上面的例子表示每月1、1 0、2 2日的4 : 4 5运行/ a p p s / b i n目录下的b a c k u p . s h。
10 1 * * 6,0 /bin/find -name "core" -exec rm {} ;
上面的例子表示每周六、周日的1 : 1 0运行一个f i n d命令。
0,30 18-23 * * * /apps/bin/dbcheck.sh
上面的例子表示在每天1 8 : 0 0至2 3 : 0 0之间每隔3 0分钟运行/ a p p s / b i n目录下的d b c h e c k . s h。
0 23 * * 6 /apps/bin/qtrend.sh
上面的例子表示每星期六的11 : 0 0 p m运行/ a p p s / b i n目录下的q t r e n d . s h

实现定时task的两种方式
一种是编辑一个文件,用crontab 载入
一种是用crontab -e 直接编辑生效

我自己一个例子

每隔以一分钟往一个文件打入一堆字符
先vi crontab1
#every minute echo char to file
1-59 * * * * echo `date`" ljn" >> /opt/lijie/lj.txt
最好加上注释
这样就能明确当前的这个定时任务的目的
然后 crontab crontab1载入crontab1这个定时任务

 

另外一种是
crontab -e
#every minute echo char to file
1-59 * * * * echo `date`" ljn" >> /opt/lijie/lj.txt

date 用单引号,是表示如果date是一个命令,就作为命令执行
如果你直接用date ,那么输出的是"date"这个字符串,而不是date这个命令的执行结果

>> 是附加到文件末尾,而>是直接覆盖文件

如果crontab -e无法编辑
那么是你的环境变量没有配置
请你进入 vi /etc/profile
加上
EDITOR=vi
export EDITOR

crontab -l 列出所有定时任务

如果要删除一个定时任务
那么
crontab -e
注释掉对应定时任务语句
例如要删除我刚刚定义的那个定时任务
#every minute echo char to file
1-59 * * * * echo `date`" ljn" >> /opt/lijie/lj.txt
只需要
#every minute echo char to file
#1-59 * * * * echo `date`" ljn" >> /opt/lijie/lj.txt

定时运行java例子:
0 5 * * * /root/herosReport_day.sh

cat herosReport_day.sh
#!/bin/sh
/opt/jdk1.5/bin/java -Dfile.encoding=UTF-8 -Xmx512m -cp /opt/baofeng_paihangbang/program/lib/commons-email-1.0.jar:/opt/baofeng_paihangbang/program/lib/activation.jar:/opt/baofeng_paihangbang/program/lib/ant.jar:/opt/baofeng_paihangbang/program/lib/commons-codec-1.3.jar:/opt/baofeng_paihangbang/program/lib/commons-collections-3.1.jar:/opt/baofeng_paihangbang/program/lib/commons-configuration-1.1.jar:/opt/baofeng_paihangbang/program/lib/commons-dbcp-1.2.1.jar:/opt/baofeng_paihangbang/program/lib/commons-httpclient-3.1-alpha1.jar:/opt/baofeng_paihangbang/program/lib/commons-io.jar:/opt/baofeng_paihangbang/program/lib/commons-lang-2.1.jar:/opt/baofeng_paihangbang/program/lib/commons-logging.jar:/opt/baofeng_paihangbang/program/lib/commons-pool-1.2.jar:/opt/baofeng_paihangbang/program/lib/dom4j.jar:/opt/baofeng_paihangbang/program/lib/dom.jar:/opt/baofeng_paihangbang/program/lib/jaxen-core.jar:/opt/baofeng_paihangbang/program/lib/jaxen-jdom.jar:/opt/baofeng_paihangbang/program/lib/jdom.jar:/opt/baofeng_paihangbang/program/lib/log4j.jar:/opt/baofeng_paihangbang/program/lib/mysql-connector-java-3.0.9-stable-bin.jar:/opt/baofeng_paihangbang/program/lib/saxpath.jar:/opt/baofeng_paihangbang/program/ com/community/AnalysisTop/DataAnalysisTopMain;

 

如果用crontab -r
就删除拉所有的定时任务

特别注意:
1, 如果用crontab 文件来载入定时任务,将会冲掉定时任务
所以如果要新增定时任务,最好就用crontab -e来新增定时任务
不要用crontab 文件。

2, crontab的日志文件为 /var/log/cron

3, 如果使用 crontab <filename> 来设置cron,一定要注意文件乱码的问题。我就碰到一个问题,/var/log/cron 日志里面显示 Dec 28 11:34:00 TARGET CROND[13449]: (hnuc) CMD (/home/hnuc/shell/t.sh^M) 后面的~M是乱码,原因是:我是使用editplus编辑的cron file,里面的回车换行符号是dos的而不是linux或者unix的。 这里的^M 实际上是个dos的换行符,在linux环境下解析成这个了。

补充说明:

使用方式 :
crontab file [-u user]-用指定的文件替代目前的crontab。
crontab-[-u user]-用标准输入替代目前的crontab.
crontab-1[user]-列出用户目前的crontab.
crontab-e[user]-编辑用户目前的crontab.
crontab-d[user]-删除用户目前的crontab.
crontab-c dir- 指定crontab的目录。
crontab文件的格式:M H D m d cmd.

M: 分钟(0-59)。
H:小时(0-23)。
D:天(1-31)。
m: 月(1-12)。
d: 一星期内的天(0~6,0为星期天)。
cmd要运行的程序,程序被送入sh执行,这个shell只有USER,HOME,SHELL这三个环境变量
说明 :
crontab 是用来让使用者在固定时间或固定间隔执行程序之用,换句话说,也就是类似使用者的时程表。-u user 是指设定指定 user 的时程表,这个前提是你必须要有其权限(比如说是 root)才能够指定他人的时程表。如果不使用 -u user 的话,就是表示设定自己的时程表。


参数 :
crontab -e : 执行文字编辑器来设定时程表,内定的文字编辑器是 VI,如果你想用别的文字编辑器,则请先设定 VISUAL 环境变数来指定使用那个文字编辑器(比如说 setenv VISUAL joe)
crontab -r : 删除目前的时程表
crontab -l : 列出目前的时程表
crontab file [-u user]-用指定的文件替代目前的crontab。
时程表的格式如下 :
f1 f2 f3 f4 f5 program
其中 f1 是表示分钟,f2 表示小时,f3 表示一个月份中的第几日,f4 表示月份,f5 表示一个星期中的第几天。program 表示要执行的程序。
当 f1 为 * 时表示每分钟都要执行 program,f2 为 * 时表示每小时都要执行程序,其馀类推
当 f1 为 a-b 时表示从第 a 分钟到第 b 分钟这段时间内要执行,f2 为 a-b 时表示从第 a 到第 b 小时都要执行,其馀类推
当 f1 为 */n 时表示每 n 分钟个时间间隔执行一次,f2 为 */n 表示每 n 小时个时间间隔执行一次,其馀类推
当 f1 为 a, b, c,... 时表示第 a, b, c,... 分钟要执行,f2 为 a, b, c,... 时表示第 a, b, c...个小时要执行,其馀类推
使用者也可以将所有的设定先存放在档案 file 中,用 crontab file 的方式来设定时程表。

例子 :
#每天早上7点执行一次 /bin/ls :
0 7 * * * /bin/ls
在 12 月内, 每天的早上 6 点到 12 点中,每隔3个小时执行一次 /usr/bin/backup :
0 6-12/3 * 12 * /usr/bin/backup
周一到周五每天下午 5:00 寄一封信给 alex@domain.name :
0 17 * * 1-5 mail -s "hi" alex@domain.name < /tmp/maildata
每月每天的午夜 0 点 20 分, 2 点 20 分, 4 点 20 分....执行 echo "haha"
20 0-23/2 * * * echo "haha"
注意 :
当程序在你所指定的时间执行后,系统会寄一封信给你,显示该程序执行的内容,若是你不希望收到这样的信,请在每一行空一格之后加上 > /dev/null 2>&1 即可

例子2 :
#每天早上6点10分
10 6 * * * date
#每两个小时
0 */2 * * * date
#晚上11点到早上8点之间每两个小时,早上8点
0 23-7/2,8 * * * date
#每个月的4号和每个礼拜的礼拜一到礼拜三的早上11点
0 11 4 * mon-wed date
#1月份日早上4点
0 4 1 jan * date
范例
$crontab -l 列出用户目前的crontab.

注意:在linux下执行JAVA,手动执行与crontab执行可能会出现乱码问题

解决方案如下:

     加入 crontab后执行环境会变为linux的root环境下的字符集,但是在每个用户下的环境是不一致的,导致中文各种乱码问题,解决办法是在shell中执行java的时候直接指定运行时encoding就可以了

   例如:
   java -Dfile.encoding=GBK -classpath $CLASSPATH:.:/home/k147984/test/DataManager/lib/balanceantlr-2.7.6.jar

### 配置 Linux Crontab 定时任务的方法 CrontabLinux 系统中用于设置周期性执行任务的工具,其功能类似于 Windows 中的计划任务。通过 `crontab` 命令,可以编辑当前用户的定时任务列表,这些任务存储在特定的文件中,并由 `crond` 守护进程定期检查和执行。以下是详细的配置方法: #### 1. 编辑 Crontab 文件 使用 `crontab -e` 命令来编辑当前用户的定时任务文件。这个命令会打开一个临时的文本编辑器(如 `vi` 或 `nano`),用户可以在其中添加、修改或删除定时任务条目。所有编辑的内容最终会被保存到 `/var/spool/cron` 目录下的文件中[^2]。 #### 2. Crontab 语法格式 每条定时任务的格式如下: ``` * * * * * command_to_execute ``` 其中五个星号分别代表时间的五个字段: - 分钟(0 - 59) - 小时(0 - 23) - 日期(1 - 31) - 月份(1 - 12) - 星期几(0 - 6)(0 表示星期日) 例如,以下命令表示在每天的 16:58 到 16:59 之间执行脚本 `/home/ldsx/test_crontab.sh`: ```bash 58-59 16 * * * /home/ldsx/test_crontab.sh ``` 此配置可以满足周期性任务的需求,例如定期备份、清理日志等[^3]。 #### 3. 查看 Crontab 任务列表 使用 `crontab -l` 命令可以列出当前用户的所有定时任务。如果需要删除所有任务,可以使用 `crontab -r` 命令。 #### 4. Crontab 的执行机制 Crontab 命令将用户的任务存储在一个文件中,并由 `crond` 守护进程定期检查这些任务。`crond` 通常每分钟运行一次,检查是否有需要执行的任务。新创建的 cron 任务不会立即执行,至少需要等待两分钟后才会执行。如果希望立即生效,可以手动重启 `crond` 服务[^4]。 #### 5. 注意事项 - **权限问题**:确保执行的脚本具有可执行权限,可以使用 `chmod +x script.sh` 命令添加执行权限。 - **环境变量**:Crontab 的环境变量可能与用户的 shell 环境不同,因此建议在脚本中使用绝对路径。 - **日志记录**:为了调试和监控,可以在脚本中添加日志输出,例如: ```bash 58-59 16 * * * /home/ldsx/test_crontab.sh >> /home/ldsx/crontab.log 2>&1 ``` 这样可以将脚本的输出(包括错误信息)记录到日志文件中,便于后续分析[^3]。 #### 6. 示例:定时执行脚本 假设有一个脚本文件 `/home/ldsx/test_crontab.sh`,内容如下: ```bash #!/bin/bash echo "This script is executed by crontab at $(date)" >> /home/ldsx/crontab_output.log ``` 确保脚本具有可执行权限: ```bash chmod +x /home/ldsx/test_crontab.sh ``` 然后使用 `crontab -e` 添加以下条目: ```bash 58-59 16 * * * /home/ldsx/test_crontab.sh ``` 保存并退出编辑器后,`crond` 将在每天的 16:58 和 16:59 执行该脚本,并将输出记录到 `/home/ldsx/crontab_output.log` 文件中。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值