Linux(入门基础):86---Linux循环计划任务(cron服务、crontab命令)

一、cron服务

1.功能

  • 系统中循环计划任务都是有cron这个系统服务来控制的

cron服务会去检测这三个地方是否有任务需要执行

  • /var/spool/cron/目录下:一般用户账号设置的任务(普通用户不能进入查看)
  • /etc/crontab文件:系统的任务(所有用户都可查看)
  • /etc/cron.d/目录下:系统的任务(所有用户都可查看)

2.特点

  • cron服务由crond程序来提供
  • cron服务是系统自动会开启的
  • cron服务是以分钟为单位来检测系统中是否有任务要执行

3.crond服务的设置

  • 重新启动crond服务:systemctl  restart  crond
  • 让crond服务开机自动启动:systemctl  enable crond
  • 查看一下crond目前的状态:systemctl  status  crond
  • Loaded:是否开机自启动,后面enable表示不能
  • Active:是否正在运行,running正在运行

二、用户任务的制定(crontab命令)

1.普通用户计划任务的运行方式

  • /var/spool/cron/目录:当用户使用crontab命令建立计划任务之后,该项任务就会被记录到/var/spool/cron/目录中(例如:dongshao的命令就存在/var/spool/cron/dongshao文件中,不能直接使用vi编辑),之后cron服务检查这个目录中的任务进行执行
  • /var/log/cron日志文件:cron服务执行的每一项任务都会被记录到/var/log/cron这个日志文件中。所以你的Linux不知道是否被植入木马,可以查找一下这个日志文件(因为木马文件都是以计划任务命令的方式植入的)

2./etc/cron.allow与/etc/cron.deny文件

  • 并不是所有人都可以执行crontab计划任务,因为出于安全的原因。于是系统用这两个文件来管控at产生任务:
  • /etc/cron.allow文件:只有在这个文件中的用户才能使用at,不在这个文件中的用户不能使用at命令(尽管没有写在at.deny中)
  • /etc/cron.deny文件:写在这个文件中的用户不能使用at命令,而没有在这个文件中的用户就可以at命令
  • 如果这两个文件都不存在,那么只有root才可以使用at命令
  • /etc/cron.allow与/etc/cron.deny文件的注意事项
  • /etc/cron.allow文件比较严谨
  • etc/cron.deny不严谨,因为写在这个文件的用户不能使用crontab命令,不在这个文件中的用户可以执行命令,不太安全

  • 这两个文件不一定同时存在,有一个存在时只会使用其中一个。怎么使用还是看自己的设定,系统中默认是cron.deny文件,并且文件是空的,代表所有用户都可以使用crontab命令设定任务

3.crontab命令

  • 格式:crontab  [-u  用户名]  [选项]

相关参数与选项

  • -u:只有root才能使用这个选项,后面接用户名,代表帮这个用户建立/删除crontab计划任务
  • -e:编辑crontab任务
  • -l:查看crontab任务
  • -r:删除所有的crontab的任务内容(就是删除/var/spool/cron目录下自己的计划任务文件)。若仅删除一项,使用-e去编辑

使用方式

  • 当命令行输入crontab命令之后就可以编辑自己的任务(crontab其实就是调用vi编辑器来编辑),编辑完之后就会在/var/spool/cron/目录下生成一个和自己用户名相同的文件
  • crontab编辑的时候,其实就是在编辑/var/spool/cron/目录下自己的计划文件。删除的时候也是把/var/spool/cron/目录下自己的计划任务文件删除
  • crontab编辑格式

分+时+日+月+周+执行命令

分钟 小时 日期 月份 命令
0~59 0~23 1~31 1~12 0~7(0和7都代表星期天) 需要执行的命令

  • 时间参数的特殊字符 
* 表示任何时间都可以。例如上图中的意思就是:每天的12点都会执行
,(逗号) 代表分隔时段的意思。例如:任务在3:00与6:00执行(0  3,6  * * *  命令
-(减号) 代表一个时间范围。例如:在8点与12点之间,每小时的20分就会执行一次(20 8-12 * * * 命令
/n(斜线) n数字,代表每隔n单位间隔。例如:每5分钟执行一次(*/5  *  *  *  * 命令
  • 周与日月不可同时并存的情况(注意)

因为crontab是指定循环计划的任务(就是会一直循环的),所以不可以指定某月某日的时候又指定星期几执行(因为这样就不能够循环执行了,而是指定就那一天执行)。例如下面这个案例就是指定9月11日星期五执行任务,那么系统可能会认为每个星期五都执行或每年的9月11日执行

crontab的演示范例

  • 案例一:dongshao设置每年的5月1日23::59发一封邮件给huqiongyu(邮件为/home/dongshao下面的lover.txt文件)

  • 案例二:每隔五分钟执行一次/home/dongshao/test.sh脚本

  • 案例三:查看目前用户的任务

  • 案例四:删除所有的的任务(只删除一项,使用crontab -e编辑删除就行了)

三、系统任务的制定(/etc/crontab文件)

1.系统任务的运行方式

  • /etc/crontab文件:系统的任务都记录在这个文件中,cron服务会去读取这个文件。所以你只要编辑这个文件就可以了(只有root才可以修改),按照格式将想要执行的系统任务写在这个文件中

2.注意事项

  • Linux下,crontab会自动帮我们每分钟读取一次/etc/crontab的计划任务列表。但是crontab是读到内存中的,所以你修改完/etc/crontab之后,任务可能不会马上执行,可以输入systemctl restart crond来重启crond服务

2./etc/crontab文件

文件的内容:

  • SHELL:命令执行时使用的shell
  • PATH:命令执行时的环境变量
  • MAILTO:当这个文件中的任务命令执行发生错误时,或者执行的命令结果有标准输出/标准错误时,会将错误信息或屏幕显示的信息传递给后面的那个账号。默认是root,如果想要传递给别人,可以改变后面这个用户(例如:[email protected]),但不建议修改

文件格式:

* * * * * user-name command to be executed
分钟 小时 月份中的日 月份 星期 执行后面那串命令的用户身份 执行的命令

四、系统任务的制定(/etc/cron.d/目录)

 1.概念

  • /etc/cron.d/目录:除了/etc/crontab中会记录系统的任务之外,/etc/cron.d/目录里面的也有很多系统的任务文件,每个文件里面执行的系统任务都不同

2.备注

  • 这个目录下可以放置一些软件的任务文件,例如:有些软件需要定期的清除垃圾防火墙规则,就可以将命令与事件写入一个文件中,放入/etc/cron.d/目录中(例如/etc/cron.d/newfile)

3.注意事项

  • 这个目录下的每个任务文件的格式都与/etc/crontab文件的格式相同
  • 查看/etc/cron.d目录下有哪些系统任务文件

  • 随机查看该目录下的任务文件内容,可以看到格式与/etc/crontab文件的格式相同

4./etc/下的一些其他文件

上图我们可以看到0hourly文件中,记录了一串命令

  • run-parts命令:是一个脚本,功能是大约5分钟内随机选一个时间点来执行后面/etc/cron.hourly目录内的执行文件,因此放在/etc/hourly目录下的必须是可执行的命令脚本才行

  • 我们进入/etc/cron.hourly目录下查看一下,可以看到一些可以执行的脚本程序

  • 接着上面的案例,我们可以知道/etc/cron.d目录下记录了一些系统任务,这些系统任务又使用命令去执行一些程序
  • 承上,除了那个/etc/cron.hourly/目录下的文件每个小时都会执行之外,系统还有一些目录,可以分别执行每周、每月、每年执行一次系统任务目录,如下图。因此,如果我们有需要每周、每月、每年执行的任务,就可以放在分别放在这些目录下。然后在/etc/cron.d/目录下建立系统任务执行文件,在这些文件中再来执行这些目录

猜你喜欢

转载自blog.csdn.net/qq_41453285/article/details/88296057
今日推荐