后台执行命令-------shell学习(3)

crontab

crontab指令可以指定一些任务,让cron可以在设定的时刻执行这些后台任务。crontab每个用户拥有一个,存储位置为/var/spool/cron/crontabs/$USERNAME。
可以用crontab [-u user] –l, -e, -r,来罗列、修改、删除(删除整个文件)crontab内容。cron在执行crontab中指定的任务时,并不能知道所需的特殊环境变量,所以最好在crontab中提供所有环境变量。
crontab filename可以将filename指定的文件覆盖当前用户的crontab文件。

 

系统用/etc/cron.allow和/etc/cron.deny来控制可以使用crontab的用户。系统的判断逻辑如下(不使用root用户):

  1. 如果存在/etc/cron.allow,则在cron.allow中的用户可以使用crontab,不在则无法使用。(此时/etc/cron.deny没有意义)
  2. 如果不存在/etc/cron.allow,存在/etc/cron.deny,则在cron.deny中的用户不能使用crontab,不在cron.deny中的用户能使用crontab。
  3. 如果两个文件都不存在,则所有用户都可以使用crontab。

文件格式: 每个任务包含6部分:分< >时< >日< >月< >星期< >要运行的命令,其中< >表示空格。星期中,0表示周日;时间如果用“*”表示,则为每一个;时间中若几个数字用“,”相隔,则表示每个独立的时间;时间中如果两个数字用“-”相连,则表示一个时间段。

 

任务执行之后如果有内容需要输出到标准输出,则会通过邮件的方式发送(当然系统中必须安装有邮件收发工具,比如mailutils,否则查看/var/log/sysylog时,我们会看到“mailed 某 bytes of output but got status 0x0001#012”):

  1. 在crontab中指定“MAILTO=username”,这样就会把结果邮件发送给username用户。
  2. 不写“MAILTO=username”,则会把邮件发送给程序的执行者。
  3. 在crontab中指定“MAILTO=”””,则不会发邮件。

 

at

可以用at time指定在time时间执行一些指令。

$ at 12:05 at> ls ~/ at> rm ~/a.cpp at> <EOT> $ at –l 3 Sat Oct 16 12:12:00 2010 a root $ atrm 3
<EOT>代表Ctrl+D。at –l用来查看当前的所有提交的任务,每个任务被分配了一个id。atrm id可用来删除任务。
所有提交的任务会存储在/var/spool/cron/atjobs/中。
如果任务执行后会有内容要输出到标准输出,则会通过邮件方式发送给命令的执行者。
系统通过/etc/at.allow和/etc/at.deny来控制用户的at使用权限,逻辑类似于crontab。

 

&后台执行命令

后台执行的程序如果有内容要输出到标准输出,那么也会直接在父Shell中输出结果。所以最好对结果进行重定向。如果想要在父Shell退出之后,该进程仍然执行,则要通过nohup指令实现。

$ ./a.out >output 2>&1 &

 

ps和kill组合使用,管理进程。

你可能感兴趣的:(shell,kill,存储,cron,任务,output)