linux如何每天linux定时执行命令某一条命令

可选中1个或多个下面的关键词,搜索相关资料。也可直接点“搜索资料”搜索整个问题。

分 时 日 月 周 要执行的命令行

}

linux系统的定时任务是由 cron (crond) 这个系统服务来控制的。Linux 系统上面原本就有非常多的计划性工作,因此这个系统服务是默认启动的。另外, 由于使用者自己也可以设置计划任务,所以,Linux系统也提供了使用者控制计划任务的命令:

crond是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动crond进程,crond进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。linux下的定时任务的执行都依赖于该守护进程。

Linux下的任务调度分为两类,系统任务调度和用户任务调度。
1)系统任务调度:系统周期性所要执行的工作,比如写缓存数据到硬盘、日志清理等。在/etc目录下有一个文件,这个就是系统任务调度的配置文件。通过编辑该文件,我们可以设置定时执行任务。

2)用户任务调度:用户定期要执行的工作,比如用户数据备份、定时邮件提醒等。用户可以使用命令来定制自己的计划任务。所有用户定义的crontab文件都被保存在/var/spool/cron目录中,其文件名与用户名一致。

crontab命令常见于Unix和类Unix的操作系统之中,用于设置周期性被执行的指令。该命令从标准输入设备读取指令,并将其存放于“crontab”文件中,以供之后读取和执行。该词来源于希腊语 chronos(χρ?νο?),原意是时间。

通常,crontab储存的指令被守护进程激活,crond进程在后台常驻运行,每一分钟检查是否有预定的作业需要执行。这类作业一般称为cron jobs。

crontab -u //设定某个用户的cron服务,一般root用户在执行这个命令的时候需要此参数
“*” 代表所有的取值范围内的数字。这个需要特别注意
“/” 代表每的意思,如*/10,如果用在minute字段,表示每十分钟执行一次。
“-” 代表从某个数字到某个数字,如“2-6”表示“2,3,4,5,6”
“,” 指定一个列表范围,例如,“1,2,5,7,8,9”

3、crontab命令定时任务文件格式

crontab调度任务的文件格式一般如下所示:

分钟 小时 天 月 天每星期 命令 每个字段代表的含义如下: Minute 每个小时的第几分钟执行该任务,范围是0 – 59 Hour 每天的第几个小时执行该任务,范围是0 – 23 Day 每月的第几天执行该任务,范围是1 – 31 在这些字段里,除了“Command”是每次都必须指定的字段以外,其它字段皆为可选

下面给出一些常用的写法。

每周六、周日的1 : 10执行ls命令

注:0表示星期天,1表示星期1,以此类推,也可以用英文来表示,sun表示星期天,mon表示星期一等。

每一小时执行一次ls命令,应该是在0分的时候

注:在某些linux系统下不支持*/n这种写法,有可能会出现错误。

注:run-parts参数表示,执行后面目录中的所有可执行文件。root表示以root身份来执行目录下可执行文件。

如第一节所述,新增调度任务可用两种方法:
1)在命令行输入: crontab -e 然后添加相应的任务,wq存盘退出。添加任务命令的格式在上一节中有详细的介绍。该命令编辑的是/var/spool/cron下对应用户的cron文件,属于用户任务调度。

crond进程每分钟不仅要读一次/var/spool/cron内的所有文件,还需要读一次/etc/crontab,因此我们配置这个文件也可以定时执行任务。用crontab配置是针对某个用户的,而编辑/etc/crontab是针对系统的任务。此文件的文件格式是:

MAILTO=root //如果出现错误,或者有数据输出,数据作为邮件发给这个帐号 HOME=/ //使用者运行的路径,这里是根目录

crontab使用过程中有一些值得注意的地方,下面做一个简单的介绍。

每条任务调度执行完毕,系统都会将任务输出信息通过电子邮件的形式发送给当前系统用户,这样日积月累,日志信息会非常大,可能会影响系统的正常运行,因此,将每条任务进行重定向处理非常重要。
例如,可以在crontab文件中设置如下形式,忽略日志输出:

“/dev/null 2>&1”表示先将标准输出重定向到/dev/null,然后将标准错误重定向到标准输出,由于标准输出已经重定向到了/dev/null,因此标准错误也会重定向到/dev/null,这样日志输出问题就解决了。

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

这篇文章介绍了linux定时执行任务的常见用法,包括两种方式:1)系统任务调度,即通过编辑/etc/crontab进行添加定时任务;2)用户任务调度,即通过crontab -e命令添加定时任务。在shell脚本的编写中,我们常用第一种方法进行定时任务的添加。

在脚本没有定时执行的时候,首先需要检查脚本的语法有没有出现问题。

有时我们创建了一个crontab,但是这个任务却无法自动执行,而手动执行这个任务却没有问题,这种情况一般是由于在crontab文件中没有配置环境变量引起的。我们在手动执行任务时是在当前shell环境下进行的,程序能够找到环境变量,而系统自动执行任务调度时,是不会加载任何环境变量的。因此,我们需要在shelll脚本中提供所有必要的路径和环境变量。

需要注意的主要有以下三点:

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

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


3)当手动执行脚本OK,但是crontab死活不执行时。这时必须大胆怀疑是环境变量惹的祸,并可以尝试在crontab中直接引入环境变量解决问题。如:

3、系统任务调度及用户任务调度

系统任务调度主要完成系统的一些维护操作,用户任务调度主要完成用户自定义的一些任务,可以将用户任务调度放到系统任务调度来完成(不建议这么做),但是反过来却不行,root用户的任务调度操作可以通过“crontab –uroot –e”来设置,也可以将调度任务直接写入/etc/crontab文件,需要注意的是,如果要定义一个定时重启系统的任务,就必须将任务放到/etc/crontab文件,即使在root用户下创建一个定时重启系统的任务也是无效的。

!!!当上述三种方法依然解决不了环境变量问题,可以将用户任务调度放到系统任务调度来完成

crontab定时任务不执行的解决办法

在ubuntu下安装crontab后,系统默认的是不开启crontab的日志记录的,启用crontab的日志的办法:
就可以查看运行时的日志文件,如果在日志文件中出现:
那么就是说,crontab执行脚本时是不会直接错误的信息输出,而是会以邮件的形式发送到你的邮箱里,这时候就需要邮件服务器了,如果你没有安装邮件服务器,它就会报这个错。如果是测试,可以用下面的办法来解决:
在每条定时脚本后面加入:

}

本文介绍在Linux下的两种定时执行任务的方法:at命令,以及crontab服务。

  假如我们只是想要让特定任务运行一次,那么,这时候就要用到at监控程序了。

  设置at命令很简单,指示定运行的时间,那么就会在哪个时候运行。at类似打印 进程,会把任务放到/var/spool/at目录中,到指定时间运行它 。at命令相当于另一个shell,运行at time命令时,它发送一个个命令,可以输入任意命令或者程序。at now + time命令可以在指示任务。

  假设处理一个大型,要在别人不用时去处理数据,比如凌晨3点10分。那么我们就应该先建立/home/kyle/do_job脚本管理数据库,计划处理/home/kyle/do_job文件中的结果。正常方式是这样启动下列命令:

  AT Time中的时间表示方法

  时 间 例子 说明

  注意:一定要检查一下atq的服务是否启 动,有些操作系统未必是默认启动的,linux默认为不启动,而ubuntu默认为启动的。检查是否启动,用service atd检查语法,用service atd status检查atd的状态,用service atd start启动atd服务。

  查看at执行的具体内容:一般位于/var/spool/at目录下面, 用vi打开,在最后一部分就是你的执行程序

  cron是一个linux下 的定时执行工具,可以在无需人工干预的情况下运行作业。由于Cron 是的内置服务,但它不自动起来,可以用以下的方法启动、关闭这个服务:

  你也可以将这个服务在系统启 动的时候自动启动:

  现在Cron这个服务已经在进程里面了,我们就可以用这个服务了,Cron服务提供以下几种接口供大家使用:

  1、直接用crontab命令编辑

  cron服务提供 crontab命令来设定cron服务的,以下是这个命令的一些参数与说明:

  crontab -u //设定某个用户的cron服务,一般root用户在执行这个命令的时候需要此参数

  分  时  日  月  周  命令

  第1列表示分钟1~59 每分钟用*或者 */1表示

  第2列表示小时1~23(0表示0点)

  第3列表示日期1~31

  第4列表示月份1~12

  第5列标识号星期0~6(0表示星期天)

  第6列要运行的命令

  crontab文件的一些例子:

  #每月1、10、22日

  #每天早上6点10分

  #晚上11点到早上8点之间每两个小时,早上8点

  #每个月的4号和每个礼拜的礼拜一到礼拜三的早上11点

  #1月份日早上4点

}

我要回帖

更多关于 linux定时执行命令 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信