【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」 自取。