关于linux:Linux之crontab命令

1次阅读

共计 3589 个字符,预计需要花费 9 分钟才能阅读完成。

【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 6am
0,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 -l
0,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 month
30 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/sh
source /etc/profile
export 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」自取。

正文完
 0