UNIX后台执行命令

来源:互联网 发布:k11防水和js防水的区别 编辑:程序博客网 时间:2024/05/02 00:58

命令解释:
    cron  系统调度进程,可以使用它在每天的非高峰负荷时间段运行作业
    at    at命令,使用它在一个特定的时间运行一些特殊的作业
    &     使用它在后台运行一个占用时间不长的进程
    nohup 使用它在后台运行一个命令,即使在用户退出时也不受影响

cron/crontab:
    cron是系统主要的调度进程,可以在无需人工干预的情况下运行作业
    crontab的命令允许用户提交、编辑和删除相应的作业。每一个用户都有自己的crontab文件,系统管理员可以通过cron.deny和cron.allow这两个文件来禁止和允许用户拥有自己的crontab文件

crontab文件的格式: 分<>时<>日<>月<>星期<>要运行的命令
    <>表示空格,日期可用-表示某个时间段, 用*表示任意条件,用“,”表示或条件
    例:30 21 * * * /apps/test.sh       每晚21:30运行/apps/test.sh
       45 4 1,10,22 * * /apps/test.sh  每月1、10、22日4:45运行/apps/test.sh
       0,30 18-23 * * 6,0 /bin/find -name "core" -exec rm {} /;
                      每个星期六、日的18点到23点,每隔30分钟运行一次find并删除
    每个命令都需要给出绝对路径,注意环境变量,cron不知道一些特殊的变量

crontab命令的格式:
    crontab [-u user] -e -l -r
    -u 用户名  -e 编辑crontab文件  -l 列出crontab文件中的内容  -r 删除crontab文件
创建一个新的crontab文件:
    在考虑向cron进程提交一个crontab文件之前,首先要做的是设置环境变量EDITOR,因为99%的UNIX和LINUX用户都使用vi,因此可以编辑$HOME目录下的.profile或.bash_profile,加入一行:
        EDITOR=vi; export EDITOR;
    编辑文件<user>cron,内容为0,15,30,45 18-06 * * * /bin/echo `date` > /dev/console
    表示每隔15分钟向控制台输出一次当前时间,这样系统崩溃的时候,可以通过文件看出来
    然后使用 crontab usercron提交给cron进程,同时副本存放在/var/spool/cron目录中

at命令:
    at命令会保留所有当前的环境变量,包括路径,不像crontab,只提供缺省的环境
    通过/etc目录下的at.deny和at.allow文件来控制哪些用户可以使用at命令
    命令格式: at [-f script] [-m -l -r] [time] [date]
    -f script 是所要提交的脚本或命令
    -l 列出当前所有等待运行的作业,atq命令具有相同的作用
    -m 作业完成后给用户发送邮件
    -r 清除作业,清除时需要提供作业标识(ID),有的系统使用atrm来清除
    time at命令的时间格式非常灵活,可以是H、HH.HHMM、HH:MM或H:M,还可以使用a.m.或p.m.
    date 日期格式可以是月份数或日期数,而且还能识别比如today,tomorrow这样的词

at命令的提交:
    $at 21:10
    at> find / -name "passwd" -print
    at> <EOT>   (这个<EOT>就是ctrl+D,表示退出)
    warning: commands will be executed using /bin/sh
    job 1 at 2005-01-01 21:10
    提交的作业被分配了一个唯一的标识 job 1
    at时间还可以是:at 6.45am May 12、at 11.10pm、at now + 1 hour、
                 at 9am tomorrow、at 15:00 May 24、at now + 10 minutes
    如果是提交一个脚本,如: at 3.00pm tomorrow -f /apps/test.sh
    还可以通过管道符,如:echo find /etc -name "passwd" -print |at now + 1 minutes
    列出所有的at作业: at -l  并且可以在/var/spool/at/下找到这些作业文件
    清除作业:  atrm [job bo]   或 at -r [job no],如 at -r job 3

&命令:
    使用这个命令可以解放出终端接着做别的事情,但是需要用户交互的程序就不能放在后台
    格式: 程序/命令    注意标准输出一样会显示在屏幕上,可以使用重定向方法解决

nohup命令:
    格式: nohup command &     这样在这个用户退出之后,进程一样会继续运行,不会中断
    使用这个命令,缺省该作业的输出都会定向到一个名为nohup.out的文件中

 

原创粉丝点击