您的位置:首页 > 运维架构 > Linux

Linux下crontab命令的使用笔记

2015-10-03 21:00 627 查看
0,15,30,45 18-06 * * * /bin/echo `aaa` > /dev/tty1
#每天的6点到18点的0,15,30,45分时,把时间覆盖输出到终端tty1上,如果是追加,那就是
/bin/echo `date` >> /dev/tty1。 (不建议追加,因为这个操作的好处就是不断的输出时间,然后作为一个运行的凭据,如果出现了某个终端,我们可以在可以挽救的时间误差内记录下有什么意外情况。)
在date这个命令的两边,有一个括号内的标点( `),笔记本键盘的数字键1左边那个,英文字符下就ok。

30 3 1,7,14,21,26 * * /bin/find / -name "aaa" -exec rm {} \;
#每个月的1,7,14,21,26号的3:30分把/下查找到的名字是aaa的内容(因为这里没有指定type就是file。或许有的是目录呢。)给删除掉。
{}就是前面找到的文件名称
\; 的原因是因为find命令要以一个”;“作结尾,但为了不让”;“被shell误解所以加了一个转义字符"\"

每五分钟执行 */5 * * * *每小时执行 0 * * * *每天执行 0 0 * * *每周执行 0 0 * * 0每月执行 0 0 1 * *每年执行 0 0 1 1 *

图片为转载内容点我:



对于以上个字段,可以填写以下内容。星号(*):代表所有可能的值,例如month字段如果是星号,则表示在满足其它字段的制约条件后每月都执行该命令操作。逗号(,):可以用逗号隔开的值指定一个列表范围,例如,“1,5,7,8,”中杠(-):可以用整数之间的中杠表示一个整数范围,例如“1-6”表示“1,2,3,4,5,6”正斜线(/):可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次(或者*/2)。同时正斜线可以和星号一起使用,例如*/10,如果用在minute字段,表示每十分钟执行一次。文件:/etc/cron.deny说明:该文件中所列用户不允许使用crontab命令文件:/etc/cron.allow说明:该文件中所列用户允许使用crontab命令文件:/var/spool/cron/说明:所有用户crontab文件存放的目录,以用户名命名crontab -l #列出计划任务的文件。(建议大家修改文件的时候注释另起一行写,否则配置文件会出现不生效的情况。这里只是为了方便查看)

crontab -l > $HOME/mycron #将自己的crontab文件在home下做一下备份,避免丢失或者误操作后无法恢复。
crontab -e #编辑计划任务。如果任务没有执行,就把/var/spool/cron/<username>下的计划任务粘到/etc/crontab中,有时候会出现计划任务有的不执行。
crontab -r #删除计划任务的文件。
如果出现了误删,可以将备份了的crontab文件cp到/var/spool/cron/<username>(username必须是你指定的用户名,你希望发生操作的用户。如果你希望root用户产生这个计划任务,那么username一定是root了。)
或者crontab <filename> 这个filenmae是home下那个文件的名字。
/sbin/service crond reload #重新加载crontab的配置,并不是重启服务,只是重新加载。

举个例子:

每月的4号与每周一到周三的11点重启smb 命令:0 11 4 * mon-wed /etc/init.d/smb restart

一月一号的4点重启smb 命令:0 4 1 jan * /etc/init.d/smb restart
每小时执行/etc/cron.hourly目录内的脚本命令:01 * * * * root run-parts /etc/cron.hourly #root run-parts,执行指定目录下所有脚本。如果执行单个脚本的话,就去掉root run-parts,单独写脚本的名字。

注意环境变量问题,文件路径一定是绝对路径,脚本运行一定前面就写好运行的环境变量。
0 * * * * . /etc/profile;/bin/sh /var/www/java/audit_no_count/bin/restart_audit.sh #此处直接加入了环境变量。
另外,如果这个脚本是其他变量,把/bin/sh改掉就ok
由于一些业务操作时,一定会给当前用户发邮件,提示You have mail in /var/spool/mail/root之类的。时间长了占据大量空间。
解决办法:0 */1 * * * /usr/local/aaa reload >/dev/null 2>&1
#“/dev/null 2>&1”表示先将标准输出重定向到/dev/null,然后将标准错误重定向到标准输出,由于标准输出已经重定向到了/dev/null,因此标准错误也会重定向到/dev/null,这样日志输出问题就解决了。

如果要定义一个定时重启系统的任务,就必须将任务放到/etc/crontab文件,即使在root用户下创建一个定时重启系统的任务也是无效的。
新创建的cron job,不会马上执行,至少要过2分钟才执行。如果service crond reload则马上执行。当crontab突然失效时,可以尝试/etc/init.d/crond restart解决问题。或者查看日志看某个job有没有执行/报错tail -f /var/log/cron。千万别乱运行crontab -r。它从Crontab目录(/var/spool/cron)中删除用户的Crontab文件。删除了该用户的所有crontab都没了(这就是前面重点讲的一定要备份crontab -l > $HOME/mycron )。在crontab中%是有特殊含义的,表示换行的意思。如果要用的话必须进行转义\%,如经常用的date ‘+%Y%m%d’在crontab里是不会执行的,应该换成date ‘+\%Y\%m\%d’。 \ 的作用如同前面提到的/bin/find / -name "aaa" -exec rm {} \; #给; 这个字符转义,避免冲突。 ;的本义则是给/bin/find / -name "aaa" -exec rm {}这个命令一个结尾。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息