欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

计划任务

程序员文章站 2022-07-03 15:53:18
...

计划任务分为两种:

1.突发性的任务,只执行一次,使用at

2.例行行的任务,循环执行,使用crontab

一、at

需要atd服务的支持。

sudo apt install at//Ubuntu需要安装atd服务

systemctl restart atd 重新启动atd服务

systemctl enable atd 开机自启动atd

systemctl status atd 查看一下atd目前的状态

计划任务

atd的运行方式

at命令来产生计划任务,并将这个任务以文本文件的形式写入/var/spool/at目录内

使用/etc/at.allow与/etc/at.deny来限制at命令

1)先判断/etc/at.allow这个文件是否存在,若存在只有写在这个文件中的用户才能使用at,否则不能使用(即使该用户没有写在at.deny中)。

2)若/etc/at.deny不存在,就查找/etc/at.deny文件,在该文件中出现的用户不能使用at,没有在这个文件中出现的用户可以使用at

3)若两个文件都不存在,则只有root可以使用at这个命令。

Cracker程序往往会利用计划任务来执行或搜集系统消息并定时返回给Cracker团体。

计划任务

计划任务

at的优点:可以将at任务独立出你bash环境,直接交给atd程序来接管。

二、contab

需要cron服务的支持

其中/etc/cron.allow与/etc/cron.deny与at类似

crontab命令来产生计划任务,并将这个任务以文本文件的形式写入/var/spool/cron目录内,而且是以账号作为判断依据的。例如:dmtsai使用crontab之后,它的任务会被记录到/var/spool/cron/dmtsai中。

不要使用vi直接编辑该文件,可能会由于输出语法的错误导致无法执行cron。使用crontab -e来添加例行任务

cron执行的每个任务会被记录到/var/log/cron这个日志文件中,是否被植入木马程序可以在这里看到。

计划任务

计划任务

在周的那个数字中0和7都是周日的意思

crontab -e是针对用户的cron来设计的,如果执行系统的例行性任务只需编辑/etc/crontab这个文件就行。

crontab -e这个crontab其实是/usr/bin/crontab这个执行文件,但是/etc/crontab是一个纯文本文件。

cron服务读取配置文件的位置

一般来说,crond默认会有三个地方执行脚步配置文件:

/etc/crontab

/etc/cron.d/*

/var/spool/cron/*

和系统运行有关系的两个配置文件是/etc/crontab文件以及/etc/cron.d/*目录内的文件,

用户自己的任务有关系的配置文件是/var/spoll/cron/内的文件。

总结:

1)个人化的行为使用『 crontab -e 』
如果你是依据个人需求来建立的例行工作排程,建议直接使用 crontab -e来建立你的工作排程较佳! 这样也能保障你的指令行为不会被大家看到 (/etc/crontab 是大家都能读取的权限喔!);

2)系统维护管理使用『 vim /etc/crontab 』
如果你这个例行工作排程是系统的重要工作,为了让自己管理方便,同时容易追踪,建议直接写入 /etc/crontab 较佳!

3)自己开发软件使用『 vim /etc/cron.d/newfile 』:如果你是想要自己开发软件,那当然最好就是使用全新的配置文件,并且放置于 /etc/cron.d/ 目录内即可。

4)固定每小时、每日、每周、每天执行的特别工作:如果与系统维护有关,还是建议放置到 /etc/crontab 中来集中管理较好。 如果想要偷懒,或者是一定要再某个周期内进行的任务,也可以放置到上面谈到的几个目录中,直接写入指令即可!

需要注意

1)资源分配

2)利用数据流重定向,将不需要的结果输出到/dev/null垃圾桶中

3)周与日月不可以共存

三、anacron

anacron的存在是为了处理非24小时运行的Linux系统所执行的crontab,以及由于某些原因导致的超过时间而没有被执行的任务

anacron本质上是一个程序并非服务。

该程序是会周期执行的,会存在于/etc/cron.hourly或/etc/cron.daily或/etc/cron.monthly或/etc/weekly中。

Ubuntu中,anacron最快每一天执行一次,其配置文件不放置在/etc/cron.hourly中。但是在CentOS中就是存在于/etc/cron.houly中,会每小时执行一个anacron。

计划任务

anacron的配置文件是/etc/anacrontab

 

总结:

1)crond会主动读取/etc/crontab、/var/spool/cron/*、/etc/cron.d/*等配置文件,并根据分、时、日、月、周的时间去配置各项计划任务;

2)根据/etc/cron.d/0hourly的设置,主动去/etc/cron.hourly/目录下,执行所有在该目录下的执行文件;(在Ubuntu下是没有0hourly该文件,/etc/cron.hourly/下是没有任何文件的)

3)因为/etc/cron.hourly/0anacron这个脚本的缘故,主动地每小时执行anacron,并调用/etc/anacrontab的配置文件;

4)根据/etc/anacrontab的设置,根据每天,每周,每月地去分析/etc/cron.daily/、/etc/cron.weekly/、/etc/cron.monthly/内的执行文件,以执行固定周期需要执行的命令。

所以在/etc/crontab中放置的操作,一旦过期了,并不会重新执行;但是/etc/cron.weekly/目录下,那么该任务就会固定一周内执行一次。


参考《鸟哥的Linux私房菜》第四版