61阅读

linux计划任务-Linux计划任务Crontab学习笔记(3):配置文件

发布时间:2018-05-08 所属栏目:linux服务器配置与管理

一 : Linux计划任务Crontab学习笔记(3):配置文件

【全局(系统)配置文件】


/etc/crontab


Linux 主要的配置文件都在 etc 目录下。


cd /etc
ls cron*





vim crontab

进入 cron.d(服务)


cd cron.d


使用 cat 命令查看 sysstat 文件(cat命令是linux下的一个文本输出命令,通常是用于观看某个文件的内容的 )


cat sysstat

会发现,查看的内容和 crontab -l 时的内容很相似

在 crontab 载入配置文件的时候,会把 cron.d 下面的文件里面的配置信息载入成为 root 用户的计划任务,如果用 crontab -e 命令去编辑它的时候,实际上会破坏它原始文件配置的内容,,所以一般情况下是不愿意使用 crontab -e 的。如果直接编辑文件:vim sysstat,此时再使用 crontab -l,会发现编辑文件不会被直接载入(crontab -l 查看的内容不会改变),可以通过 crontab sysstat 的方式(crontab 后面跟一个文件的方式)把文件载入,然后再使用 crontab -l 查看,此时文件里面的内容覆盖了原来 crontab -l 里面所有的东西,所以在用 crontab 后面跟一个文件这种形式导入的时候要非常小心,因为 crontab -e 里面的内容都会被文件复写。要使一个计划任务不会被丢失,通常情况下不是使用 crontab -e,而是在一个文件中去添加,然后再载入,这样系统重启的时候,这些文件也会被自动载入到计划任务列表中,注意这种方式是以 root 用户的方式载入的。

在使用 ls cron* 的命令时,会有个一 cron.d 的目录,这是配置文件的目录。它下面的 sysstat 和 etc 目录下的 crontab 文件是很类似的,

contab 不能编辑系统级的配置文件里面的计划任务(例如在 cron.d 下新建计划任务文件 crontst,里面写入 */1 * * * * dee echo "File in /ect/cron.d/crontst****",然后:wq!保存退出,这时可以使用 tail -f /var/log/cron 进行监视,可以发现这条计划任务的执行情况,但是使用 crontab -l 或者 crontab -e 就不能列出这条计划任务了)。

【补充】

先使用


crontab -l


再使用


cat /var/spool/cron/root


会发现两个命令的输出结果一样:

实际上 crontab 操作的时候,操作的是 /var/spool/cron/root 这个文件。

 可以使用


ls /var/spool/cron/root


查看所有用户的计划任务。

【Root 配置文件】

只有 Root 用户才会把这些内容载入到计划任务表中

二 : Linux计划任务Crontab学习笔记(2):基本组成与配置

【Crontab 的基本组成】

① 系统服务 CROND:每分钟都会从配置文件刷新定时任务
② 配置文件 :文件方式设置定时任务
③ 配置工具 crontab:用途调整定时任务
 

【配置文件的配置文件格式】

* * * * * COMMAND

第一个 * :分钟 0 - 59,* 表示每分钟都要执行
第二个 * :小时 0 - 23
第三个 * :日期  1 - 31
第四个 * :月份 1 - 12
第五个 * :星期 0 - 7(0 或 7 表示星期天)

 【例1】每晚的 21:30 重启 Apache


30 21 * * * service httpd restart

【例2】每月的 1、10、22 日的 4:45 重启 Apache


45 4 1,10,22 * * service httpd restart

【例3】每月 1 到 10 日的 4:45 重启 Apache


45 4 1-10 * * service httpd restart

【例4】每隔两分钟( 前面没有条件 ) 重启 Apache


*/2 * * * * service httpd restart


【例5】每个小时的奇数分钟重启 Apache


1-59/2 * * * * service httpd restart

1 分钟时开始重启

(偶数是0-58/2)

【例6】晚上11 点到早上 7 点之间,每隔 1 小时(前面有条件) 重启 Apache


0 23-7/1 * * * service httpd restart


注意:分钟用 0,如果用 * ,表示 23 点 到 7 点任何一分钟都执行,显然不是我们想要的结果

【例7】每天 18:00 至 23:00 之间 每隔 30 分钟(前面有条件) 重启 Apache


0,30 18-23 * * * service httpd restart





0-59/30 18-23 * * * service httpd restart

【小结】

① * 表示任何时候都匹配
② 可以用 "A,B,C" 表示 A 或者 B 或者 C 时执行命令
③ 可以用 "A-B" 表示 A 到 B 之间时执行命令
④ 可以用 "*/A" 表示每 A 分钟(小时等)执行一次命令

【crontab 工具的使用】

crontab 帮助信息


crontab --h





crontab --help


 

① 查看某用户(dee)的计划任务列表


crontab -l -u dee

② 修改某用户(dee)的计划任务


crontab -e -u dee


用 :wq 保存退出(貌似 Ubuntu 系统退出编辑计划任务要复杂一点)


③ 查看生成的最终计划任务文件


- /var/spool/cron

使用


tail -f /var/log/cron


查看 crontan 的日志

三 : Linux计划任务Crontab学习笔记(4):crontab 的日志

/var/log/cron 文件保存 cron 的任务执行记录


cd /var/log/
ls -l cron*


会发现每天都会有 cron 日志的变化

使用


tail -f cron


能够查看今天的 cron 的日志:

使用


cat /etc/crontab


可以看到

MAILTO=root 表示在执行某一个 crontab 命令或者任务的时候,都会生成一个记录信息发送给 root 用户

查看 root 的 mail


[root@localhost cron]# cd /var/spool/mail
[root@localhost mail]# pwd
/var/spool/mail
[root@localhost mail]# ls
dee emperor mysql root rpc
[root@localhost mail]# tail -100 root


可以看到每一个执行的命令都会以邮件的方式发送给用户,

此处能够看到一定的 cron 相关的命令。主要是日志还是在 /var/log/cron 下。

四 : Linux计划任务Crontab学习笔记(5):常见错误使用案例

① 环境变量


cd ~
pwd


就会到你登陆的那个用户的根目录下




ls -a

能够查看到 .bash_profile 这个文件


vim .bash_profile

这里面设置了一些环境变量。

可以设置一个新的环境变量,在文件末尾加上:


APPDIR=/etc
export APPDIR


:wq! 保存退出



source .bash_profile
echo $APPDIR

如果在计划任务中使用到了全局变量,例如


crontab -e


写入


*/1 * * * * echo $APPDIR >> /tmp/appdir.log


但是此时使用


tail -f /tmp/appdir.log


查看日志时,去发现显示的是空行,正常情况下应该输出 /etc

$APPDIR 根本没有被识别。

原因是在 .bash_profile 设置的环境变量没有被 crontab 识别,因此要注意。

② 命令行双引号中使用 % 时,未加反斜线

③ 第三和第五个域之间执行的是 "或" 操作

第三个域是某个月中的天,第五个域是某个月中的星期几,例如:四月的第一个星期日早晨 1 时 59 分运行 a.sh


59 1 1-7 4 * test `date +%w` -eq 0 && /root/a.sh


%w eq 0 表示当前日所在的星期的某一天如果等于 0 就执行

test 表示判断是否成功

&& 表示当 前面的 test 成功时执行

【补充】


echo $?


表示判断上一个命令执行成功与否,0 表示成功,1 表示失败

④ 分钟设置误用

 【两小时运行一次】

正确的写法


0 */2 * * * date


【再例】


1-20/2 * * * * COMMAND


表示 第1、3、5、7、9.....19 分钟运行命令

============

【综合案例】

【例1】Crontab 中最小只能设置到每分钟执行一个命令,如果想每半分钟执行某个命令怎么做到?

——通过 shell 脚本的 sleep 命令配合 Crontab 即可完成这一功能


date && sleep 0.5s && date


例如:

该例表示先执行 date,过了0.5s 之后再执行 date

【例2】


crontab -e</p> <p>*/1 * * * * date >> /tmp/date.log
*/1 * * * * seep 30s;date >> /tmp/date.log


第一个命令保证每分钟执行一遍命令

第二个命令,执行的时候,先等妨碍 30s ,再去执行

使用下面的命令可以查看写入的时间


tail -f /tmp/date.log

五 : linux怎么用at命令编写简单的计划任务?

如果想在linux下计划在将来的某个时刻执行某些命令,可以通过atd服务实现此功能。默认情况下所有的linux系统都提供此项功能。

1、使用linux 的atd服务之前首先确认atd服务是否开启,可以通过“/etc/init.d/atd status”命令查看服务的运行状态。

2、使用命令“at now+2 minutes”命令编写一个两分钟之后要执行的命令。比如2分钟之后执行查看系统当前时间命令。

3、at计划任务的时间格式可以分为“具体时间日期格式【04:00 2014-01-18】”、“模糊词语格式【midnight、noon、teatime】”、“相对计时法【now + 多少+时间单位】”

4、使用atq可以查询到已添加的at计划任务。

5、使用atrm命令可以将已添加的未执行计划任务删除,格式为“atrm 任务号”比如:“atrm 4”。

6、可以通过在/etc/at.deny和at.allow里边配置那个用户可以使用at命令。

本文标题:linux计划任务-Linux计划任务Crontab学习笔记(3):配置文件
本文地址: http://www.61k.com/1221158.html

61阅读| 精彩专题| 最新文章| 热门文章| 苏ICP备13036349号-1