【Linux常用命令速查手册】关注【入门小站】,后盾回复 「1001」 自取。

通过crontab 命令,咱们能够在固定的间隔时间执行指定的零碎指令或 shell script脚本。工夫距离的单位能够是分钟、小时、日、月、周及以上的任意组合。这个命令非常适合周期性的日志剖析或数据备份等工作。

> systemctl start/stop/restart/status cron

命令格局

crontab [-u user] file
crontab [-u user] { -e | -l | -r }

命令参数

  • -u user:用来设定某个用户的crontab服务;
  • file:file是命令文件的名字,示意将file做为crontab的工作列表文件并载入crontab。如果在命令行中没有指定这个文件,crontab命令将承受规范输出(键盘)上键入的命令,并将它们载入crontab。
  • -e:编辑某个用户的crontab文件内容。如果不指定用户,则示意编辑以后用户的crontab文件。
  • -l:显示某个用户的crontab文件内容,如果不指定用户,则示意显示以后用户的crontab文件内容。
  • -r:从/var/spool/cron目录中删除某个用户的crontab文件,如果不指定用户,则默认删除以后用户的crontab文件。
  • -i:在删除用户的crontab文件时给确认提醒。

crontab 的文件格式

字段形容容许的值
分钟一小时的第几分0-59
小时一天的第几小时0-23
日期一个月的的第几天1-31
月份一年的第几个月1-12
周几一周的第几天0-6
命令命令能够被执行的任何命令

罕用办法

创立一个新的 crontab 文件,向cron过程提交一个crontab文件之前,首先要设置环境变量EDITOR。cron过程依据它来确定应用哪个编辑器编辑crontab文件。99%的UNIX和LINUX用户都应用vi,如果你也是这样,那么你就编辑$HOME目录下的. profile文件,在其中退出这样一行

EDITOR=vi; export EDITOR

而后保留并退出。无妨创立一个名为<user> cron的文件,其中<user>是用户名,例如, davecron。在该文件中退出如下的内容。
# (put your own initials here)echo the date to the console every# 15minutes between 6pm and 6am0,15,30,45 18-06 * * * /bin/echo 'date' > /dev/console
保留并退出。留神后面5个域用空格分隔。

在下面的例子中,零碎将每隔1 5分钟向控制台输入一次以后工夫。如果零碎解体或挂起,从最初所显示的工夫就能够一眼看出零碎是什么工夫进行工作的。在有些零碎中,用tty1来示意控制台,能够依据理论状况对下面的例子进行相应的批改。为了提交你刚刚创立的crontab文件,能够把这个新创建的文件作为cron命令的参数 $ crontab davecron

当初该文件曾经提交给cron过程,它将每隔1 5分钟运行一次。同时,新创建文件的一个正本曾经被放在/var/spool/cron目录中,文件名就是用户名(即dave)。
应用-l参数列出crontab文件::
> crontab -l0,15,30,45 18-06 * * * /bin/echo `date` > dev/tty1
能够应用这种办法在$HOME目录中对crontab文件做一备份::

$ crontab -l > $HOME/mycron

这样,一旦不小心误删了crontab文件,能够用上一节所讲述的办法迅速复原。

如果心愿增加、删除或编辑crontab文件中的条目,而EDITOR环境变量又设置为vi,那么就能够用vi来编辑crontab文件crontab -e

能够像应用vi编辑其余任何文件那样批改crontab文件并退出。如果批改了某些条目或增加了新的条目,那么在保留该文件时, cron会对其进行必要的完整性检查。如果其中的某个域呈现了超出容许范畴的值,它会提醒你。咱们在编辑crontab文件时,没准会退出新的条目。例如,退出上面的一条:

# DT:delete core files,at 3.30am on 1,7,14,21,26,26 days of each month30 3 1,7,14,21,26 * * /bin/find -name 'core' -exec rm {} \;

最好在crontab文件的每一个条目之上退出一条正文,这样就能够晓得它的性能、运行工夫,更为重要的是,晓得这是哪位用户的定时作业。

删除crontab文件crontab -r

每1分钟执行一次cmd

 * * * * * cmd

每小时的第3和第15分钟执行

3,15 * * * * cmd

在上午8点到11点的第3和第15分钟执行

3,15 8-11 * * * cmd

每隔两天的上午8点到11点的第3和第15分钟执行

3,15 8-11 */2  *  * cmd

每周一上午8点到11点的第3和第15分钟执行

3,15 8-11 * * 1 cmd

每晚的21:30重启smb

30 21 * * * /etc/init.d/smb restart

每月1、10、22日的4 : 45重启smb

45 4 1,10,22 * * /etc/init.d/smb restart

每周六、周日的1 : 10重启smb

10 1 * * 6,0 /etc/init.d/smb restart

每天18 : 00至23 : 00之间每隔30分钟重启smb

0,30 18-23 * * * /etc/init.d/smb restart

每星期六的早晨11 : 00 pm重启smb

0 23 * * 6 /etc/init.d/smb restart

每一小时重启smb

0 */1 * * * /etc/init.d/smb restart

早晨11点到早上7点之间,每隔一小时重启smb

0 23-7 * * * /etc/init.d/smb restart

应用注意事项

留神环境变量问题

有时咱们创立了一个crontab,然而这个工作却无奈主动执行,而手动执行这个工作却没有问题,这种状况个别是因为在crontab文件中没有配置环境变量引起的。

在crontab文件中定义多个调度工作时,须要特地注环境变量的设置,因为咱们手动执行某个工作时,是在以后shell环境下进行的,程序当然能找到环境变量,而零碎主动执行任务调度时,是不会加载任何环境变量的,因而,就须要在crontab文件中指定工作运行所需的所有环境变量,这样,零碎执行任务调度时就没有问题了。

不要假设cron晓得所须要的非凡环境,它其实并不知道。所以你要保障在shelll脚本中提供所有必要的门路和环境变量,除了一些主动设置的全局变量。所以留神如下3点:

  • 脚本中波及文件门路时写全局门路;
  • 脚本执行要用到java或其余环境变量时,通过source命令引入环境变量,如::
cat start_cbp.sh#!/bin/shsource /etc/profileexport RUN_CONF=/home/rumenz/usr/local/temp/bin/run.sh -c mev &
  • 当手动执行脚本OK,然而crontab死活不执行时,很可能是环境变量惹的祸,可尝试在crontab中间接引入环境变量解决问题。如::
0 * * * * /etc/profile;/bin/sh /var/www/java/bin/restart_audit.sh

留神清理零碎用户的邮件日志

每条任务调度执行结束,零碎都会将工作输入信息通过电子邮件的模式发送给以后零碎用户,这样与日俱增,日志信息会十分大,可能会影响零碎的失常运行,因而,将每条工作进行重定向解决十分重要。
例如,能够在crontab文件中设置如下模式,疏忽日志输入::
0 */3 * * * /usr/local/bin/apachectl restart >/dev/null 2>&1
/dev/null 2>&1示意先将规范输入重定向到/dev/null,而后将规范谬误重定向到规范输入,因为规范输入曾经重定向到了/dev/null,因而规范谬误也会重定向到/dev/null,这样日志输入问题就解决了。

零碎级任务调度与用户级任务调度

零碎级任务调度次要实现零碎的一些保护操作,用户级任务调度次要实现用户自定义的一些工作,能够将用户级任务调度放到零碎级任务调度来实现(不倡议这么做),然而反过来却不行,root用户的任务调度操作能够通过crontab –uroot –e来设置,也能够将调度工作间接写入/etc/crontab文件,须要留神的是,如果要定义一个定时重启零碎的工作,就必须将工作放到/etc/crontab文件,即便在root用户下创立一个定时重启零碎的工作也是有效的。

原文链接:https://rumenz.com/rumenbiji/...
微信公众号:入门小站

【Linux常用命令速查手册】关注【入门小站】,后盾回复 「1001」 自取。