linux 后台运行程序
1.cron和crontab
cron是系统主要的调度进程,可以在无需人工干预的情况下运行作业。crontab命令允许用户提交、编辑或删除相应的作业。
创建用户crontab文件:
crontab文件的格式:分<>时<>日<>月<>星期<>要运行的命令
星期0~6(0表示星期天),小时1~23(0表示子夜)
其中<>表示空格,在这些域中,可以用横杠-来表示一个时间范围,例如你希望星期一至星期五运行某个作业,那么可以在星期域使用1-5来表示。还可以在这些域中使用逗号“,”,例如你希望星期一和星期四运行某个作业,只需要使用1 , 4来表示。可以用星号*来表示连续的时间段。如果你对某个表示时间的域没有特别的限定,也应该在该域填入*。该文件的每一个条目必须含有5个时间域,而且每个域之间要用空格分隔。该文件中所有的注释行要在行首用#来表示。
crontab文件条目举例: 10 1 * * 6,0 /bin/find -name "core" -exec rm {} ;
上面的例子表示每周六、周日的1:10运行一个find命令。
提交用户crontab文件: crontab crontab-userfile
实际上是将crontab-userfile中的条目写入/var/spool/cron/
编辑cron文件: Crontab [-u user] -e -l -r
-u 用户名, -e 编辑crontab文件, -l 列出crontab文件中的内容, -r 删除crontab文件。
2.at 允许用户向cron守护进程提交作业,使其在指定的稍后时间运行。
一旦一个作业被提交,at命令将会保留所有当前的环境变量,包括路径,不象crontab,只提供缺省的环境。该作业的所有输出都将以电子邮件的形式发送给用户,除非你对其输出进行了重定向,绝大多数情况下是重定向到某个文件中。
at [-f script-filename] [-m -l ][ -r jobnum] [time] [date]
-f script-filename :是所要提交的脚本或命令。
-l :列出当前所有等待运行的作业。atq命令具有相同的作用。
-r jobnum :清除作业,要提供相应的作业标识(ID);有些UNIX变体只接受atrm作为清除命令。
-m :作业完成后给用户发邮件。
time :at命令的时间格式非常灵活;可以是H、HH.MM、HH:MM或H:M等。还可以使用a.m .或p.m .。
date :日期格式可以是月份数或日期数,而且at命令还能够识别诸如today、tomorrow这样的词。
3.&命令 把作业放到后台执行
该命令的一般形式为:command &
作业在后台运行一样会将结果输出到屏幕上,干扰你的工作。如果放在后台运行的作业会产生大量的输出,最好使用下面的方法把它的输出重定向到某个文件中: command >out.file 2>&1 &
eg: find /etc -name "srm.conf" -print >find.dt 2>&1 &
4.nohup nohup命令可以在你退出帐户之后继续运行相应的进程
该命令的一般形式为:nohup command &
如果使用nohup命令提交作业,那么在缺省情况下该作业的所有输出都被重定向到一个名为nohup.out的文件中,除非另外指定了输出文件: nohup command > myout.file 2>&1 &