linux常用计划任务,Linux常用命令—crontab(计划任务)

本文详细介绍了Linux系统中crontab的使用方法,包括如何设置定时任务、命令的执行格式、后台执行命令以及重定向输出。还提到了crontab的一些注意事项,如环境变量的设置、输出重定向以及可能遇到的问题和解决办法。对于需要定期执行脚本和管理后台任务的用户,这篇文章提供了实用的指导。
摘要由CSDN通过智能技术生成

项目背景:自动建立词典的脚本,线上每天要更新RS的词典,需要在定期的从log平台上挖掘数据并建立词典,以便第二天更新线上词典。需要对建库的脚本定期的执行。

作用:crontab是循环执行例行性的任务,每个用户都有自己的crontab文件,存在/var/spool/cron目录下。

语法:usage: crontab

[-u user] file

crontab

[-u user] [ -e | -l | -r ]

(default

operation is replace, per 1003.2)

-e (edit

user's crontab)

-l (list

user's crontab)

-r (delete

user's crontab)

-i (prompt

before deleting user's crontab)

-s (selinux

context)

(1)

使用:

可以用crontab

-e 添加要执行的命令。 命令执行的结果,无论是标准输出还是错误输出,都将以邮件形式发给用户。

添加的命令必须以如下格式: *

* * * * /command path

前五个字段可以取整数值,指定何时开始工作,第六个域是字符串,即命令字段,其中包括了crontab调度执行的命令。 各个字段之间用spaces和tabs分割。

前5个字段分别表示:

分钟:0-59

小时:1-23

日期:1-31

月份:1-12

星期:0-6(0表示周日)

还可以用一些特殊符号:

*: 表示任何时刻

,: 表示分割

-:表示一个段,如第二端里: 1-5,就表示1到5点

/n

: 表示每个n的单位执行一次,如第二段里,*/1, 就表示每隔1个小时执行一次命令。也可以写成1-23/1.

crontab文件条目例子:

30 21 * * *

/usr/local/apache/bin/apachectl

restart  表示每晚的21:30重启apache。

(2)

& 后台执行命令

当在前台运行某个作业时,终端被该作业占据;而在后台运行作业时,它不会占据终端。可以使用&命令把作业放到后台执行。

如:

30

2 * * * /data/app/scripts/hotbackup/hot_database_backup.sh

&

在后台运行作业时要当心:需要用户交互的命令不要放在后台执行,因为这样你的机器就会在那里傻等。

不过,作业在后台运行一样会将结果输出到屏幕上,干扰你的工作。如果放在后台运行的作业会产生大量的输出,最好使用下面的方法把它的输出重定向到某个文件中:

如:command

>out.file 2>&1 &

在这个例子中,2>&1表示所有的标准输出和错误输出都将被重定向到一个叫做out.file 的文件中。

(3)

2>&1 含义

先看一个例子:

0 2 * * *

/u01/test.sh >/dev/null 2>&1 &

这句话的意思就是在后台执行这条命令,并将错误输出2重定向到标准输出1,然后将标准输出1全部放到/dev/null 文件,也就是清空。

在这里有有几个数字的意思:

0表示键盘输入

1表示标准输出

2表示错误输出.

我们也可以这样写:

0 2 * * *

/u01/test.sh >/u01/out.file

& --这里没写,默认是1

0 2 * * *

/u01/test.sh 1>/u01/out.file

&

0 2 * * *

/u01/test.sh 2>/u01/out.file

&

0 2 * * *

/u01/test.sh 2>/u01/out.file 2>&1

&

将tesh.sh 命令输出重定向到out.file, 即输出内容不打印到屏幕上,而是输出到out.file文件中。

2>&1 是将错误输出重定向到标准输出。 然后将标准输入重定向到文件out.file。

&1 表示的是文件描述1,表示标准输出,如果这里少了&就成了数字1,就表示重定向到文件1。

(4)

注意事项

不要假定cron知道所需要的特殊环境,它其实并不知道。所以你要保证在shelll脚本中提供所有必要的路径和环境变量,除了一些自动设置的全局变量。所以注意如下3点:

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/java/audit_no_count/bin/restart_audit.sh

(5)

其他应该注意的问题

1)新创建的cron

job,不会马上执行,至少要过2分钟才执行。如果重启cron则马上执行。

2) 每条 JOB

执行完毕之后,系统会自动将输出发送邮件给当前系统用户。日积月累,非常的多,甚至会撑爆整个系统。所以每条 JOB

命令后面进行重定向处理是非常必要的: >/dev/null 2>&1 。前提是对 Job

中的命令需要正常输出已经作了一定的处理, 比如追加到某个特定日志文件。

3)当crontab突然失效时,可以尝试/etc/init.d/crond

restart解决问题。或者查看日志看某个job有没有执行/报错tail -f /var/log/cron。

4)千万别乱运行crontab

-r。它从Crontab目录(/var/spool/cron)中删除用户的Crontab文件。删除了该用户的所有crontab都没了。

5)在crontab中%是有特殊含义的,表示换行的意思。如果要用的话必须进行转义\%,如经常用的date

‘+%Y%m%d’在crontab里是不会执行的,应该换成date ‘+\%Y\%m\%d’`。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值