Linux 进程管理(2)

122 阅读3分钟

这是我参与更文挑战的第22天 ,活动详情查看更文挑战

at

指定在将来的某个时间点执行某些命令,通过atd守护进程来实现

systemctl status atd

at [选项] TIME

at -l / atq  #列出所有的作业
at -d / atrm 任务号  #删除作业
at -q #指定队列来存储(默认为a队列),队列的编号为a-z A-Z,共52个,字母越大,优先级越低。

执行方式:

  • 交互式 在shell提示符下输入“at 时间”,然后按回车键。这时在下一行shell会等待用户继续输入要执行的命令。每一行输入一个命令,所有命令都输入完毕后按Ctrl+d键结束。

  • 指定文件 将各个命令写入shell脚本中,然后使用下面格式设置在指定时间执行shell脚本中的命令: at 时间 -f 脚本文件。

执行结果会发邮件通知 /var/spool/mail/xxx

时间格式
  • 具体时间日期 hh:mm MM/DD/YY 23:59 03/15/2017
  • 模糊词语格式 hh:mm midnight tomorrow am… 17:20 tomorrow
  • 相对计时法 时间点 + 多少 + 时间单位 now + 2 minutes 5pm + 3 days

cron

at命令产生的进程调度不具有周期性,只能在时间条件满足时执行一次。但很多时候需要重复地周期性地执行某个程序。crontab用来让使用者在固定时间或固定时间间隔执行程序。

格式:

crontab [ -u user ] 文件

crontab [ -u user ] { -l | -r | -e }

只有root用户可以指定他人的时间表

主要参数

  • e:执行文字编辑器来设定时程表,内定的文字编辑器是vi
  • r:删除目前的时程表
  • l:列出目前的时程表 和at命令相比,crontab命令适合完成固定周期的任务

原理

  1. cron命令在系统启动时由一个shell脚本自动启动,进入后台,crond守护进程。
  2. cron启动后搜索/var/spool/cron目录,寻找以/etc/passwd文件中的用户名命名的crontab文件,被找到的这种文件将载入内存。
  3. 如果没有crontab文件,就转入“休眠”状态,释放系统资源。
  4. cron每分钟“醒”过来一次,查看当前是否有需要运行的命令。
  5. 如果发现某个用户设置了crontab文件,它将以该用户的身份去运行文件中指定的命令。命令执行结束后,任何输出都将作为邮件发送给crontab的所有者,或者/etc/crontab文件中MAILTO环境变量中指定的用户。

对用户来说,只需要关注自己的crontab文件的撰写,不需干涉crond进程的执行。因为一个用户只有一个crontab文件,crontab文件不能直接创建或者直接修改,必须通过crontab命令得到。crontab命令用于安装、删除或者列出用于驱动cron后台进程的crontab文件 。