at是一次性计划任务,是安排某个任务在指定的时间允许一次执行。如果要周期执行就需要crontab了。

Linux进程管理-crontab

最重要的就是crontab里面时间的书写格式了

分钟小时 星期 脚本/命令 使用crontab -e编写计划任务只要将这几个部分填写好就可以了。

把具体的时间值填上,不知道的添加上*就可以了。

比如对一个数据库每天凌晨四点做一个备份,那么时间格式怎么写?

凌晨四点,那么是四点整,那么分钟这个位置的值就为0,小时是4,因为每天凌晨四点。没说是哪一天那么就写上*,也没说是几月份那么也写上*,也没说是星期几也写上*

分钟小时  星期

0     4   *   *   *

 

周二和周五的下午六点备份

分钟小时 星期

0    18   *  *   2,5

逗号用来分隔不连续的值,表示每个星期二和星期五。

 

一月份到三月份,周二和周五的下午六点备份

分钟小时 星期

0    18   *  1-3  2,5

连续的值用横杠来分隔。

 

周一到周五,17:30分发一条广播通知用户马上关机,17:45分关机,这里就要分两步来写了。

分钟小时 星期  命令

30   17   *  *  1-5   /user/bin/wall < /etc/issue通知的信息都写在这个文件里面

分钟小时 星期  命令

45   17   *  *  1-5  /sbin/shutdown -h now或者init 5

 

每隔两分钟,中午12到下午两点,三月到6月和9月到12月,周一到周五,备份/etc目录。

分钟小时               星期   命令

*/2   12-14   *  3-6,9-12     1-5    /bin/cp  -r  /etc  /backup/etc.20180117

*/2代表每隔两分钟,每隔一个小时在小时位置写上*/1

在做计划任务的时候不是将这个命令写到这就行了,还得判断命令是否执行成功2> /backup/etc.bak.err

这样可以定期在backup下面可以查看/etc目录备份有没有成功。

 /bin/cp  -r  /etc  /backup/etc.20180117  2> /backup/etc.bak.err >/dev/null

正确的备份信息放到/dev/null伪设备里面,不显示在前台

Linux进程管理-crontab


Linux进程管理-crontab

同样和at一样,所写的计划任务会保存在/var/spool/cron下面。计划任务会以用户名来命名,这些都是计划任务产生的临时文件,计划任务执行完后这个文件会消失。

[[email protected] cron]# crontab -l

0  0  * * 1-5 wall < /test.txt

[[email protected] cron]# cd /var/spool/

[[email protected] spool]# ls

abrt  abrt-upload  anacron  at  cron  cups  lpd  mail  plymouth  postfix

[[email protected] spool]# cd cron/

[[email protected] cron]# ls

root

[[email protected] cron]# cat root

0  0  * * 1-5 wall < /test.txt

如果有多个计划任务,不建议使用crontab -e删除,这样会将所有的计划任务删除。还是使用crontab -e来删除计划任务。

 

同样看看crond进程有没有启动,如果没有启动将其启动起来

[[email protected] cron]# ps -le | grep cron

4 S     0   1058      1  0  80   0 - 31563 hrtime ?        00:00:01 crond   

[[email protected] cron]# /etc/rc.d/init.d/crond start

 

/etc下面有crontab的配置文件。

[[email protected] cron]# vi /etc/crontab

在这里面有系统自己的计划任务。里面定义了一周执行的计划任务,一个月执行的计划任务。

[[email protected] cron]# ls -a /etc | grep cron

anacrontab

cron.d

cron.daily

cron.deny

cron.hourly

cron.monthly

crontab

cron.weekly

要想每天,你、每个星期,每个月自动的执行计划任务就可以在该文件里面定义。这样就不需要写crontab,直接将写好的计划任务丢到/etc/crontab里面就可以了。

Linux进程管理-crontab


Linux进程管理-crontab

进程处理的方式主要有三种,standalone就是这个服务启动起来以后,它的进程会在系统当中驻留占用系统的CPU和内存资源,在等待监听客户端的请求,一旦有客户端的请求马上就给出应答。Standalone的进程因为一直在监听所以占用的系统资源比较多,不管有没有客户端的访问,但是客户端在访问的时候相应的速度很快,比如Apache

 

Xinetd,也就是说这个服务用的比较少,可以使用xinetd这个进程进行托管,[[email protected] cron]# ps -le | grep inetd可以查看xinetd的进程,通过[[email protected] cron]# ls /etc/xinetd.d/

可以查看到里面的服务对应一个配置文件,都是通过xinetd进行托管的。托管不像standalone一样一直在系统当中驻留占用资源来监听客户端的请求,而是xinetd在监听端口,一旦有客户端像这个端口发送请求,这个时候xinetd会检测到会启动来应答客户端的请求,应答完之后会终止这个进程。这样的好处就是不会在系统当中一直占用系统的资源,但是缺点就是响应速度可能慢一点,Telnet就是这种方式。

 

在选择的时候怎么选择standalonexinetd,就是考察这个服务有没有大量的访问需要快速的应答。比如像apache,ngnixweb server往往需要standalone的,比如内部的FTP,访问量不大就可以使用xinetd,只要占用资源不多,对访问速度要求不高都可以使用xinetd

 

在做计划任务的时候为什么不可以精确到秒,因为at,crond这个计划任务的进程和上面两种进程处理方式不一样,它们并不像standalone一样一直在后台监听客户端的请求,如果是这样时间就可以精确到秒了,同样不像xinetd一样有客户端请求才进行启动应答。atd,crond是每隔一分钟从休眠状态当中醒来,平时都在休眠,醒来之后在自己的计划任务列表里面查看有没有要执行的计划任务。有就执行,没有就继续休眠,因为一分钟醒来一次所以不能精确到秒。




相关文章:

  • 2021-10-23
猜你喜欢
  • 2021-09-25
  • 2021-08-08
  • 2021-06-05
  • 2021-12-16
  • 2022-01-07
相关资源
相似解决方案