shell中的一些后台执行命令(crontab/at/&/nohup)

来源:互联网 发布:美微网络电视柠檬tv 编辑:程序博客网 时间:2024/06/02 04:40

当你在终端或控制台工作时,可不希望一个作业一直霸占着整个屏幕,因为可能还有别的事情要做。这个时候,我们就想着说让进程能在后台运行就完美了。
下面有几种方法可供选择:
1.设置crontab文件,提交作业运行:
2.at:使用它在一个特定的时间运行一些特殊的作业,或在晚一些的非负荷高峰时间段或高峰负荷时间段运行
3. &:在后台提交占用时间不长的进程作业。
4.nohup :用该命令来提交作业,即使在用户退出时也不受影响


crontab

cron是系统主要的调度过程,可以在无需人工干预的情况下运行作业,它有一个叫做crontab的命令允许用户提交、编辑或删除相应的作业。crontab文件的位置一般在/var/spool/cron/下,具体的配置建议参考http://blog.chinaunix.net/uid-20448327-id-4195269.html
crontab文件各条目的格式:
分+时+日+月+星期+要运行的命令command
各个域之间必须用空格隔开
各个域取值说明:
1. 分:1-60,时:0-23;日:1-31;月:1-12;星期:0-6
2. 如果每个域取多个值,各个值之间用逗号,隔开
3. 如果每个域取连续的值,取开头值和结尾值,中间用横杠- 连接即可
4. 必须每个域都有值,如果不限定,用*表示

步骤:
在创建crontab文件之前,要配置相应的环境变量EDITOR。
cron进程根据它来确定使用哪个编辑器编辑crontab文件。如果你用的是vi,那么你就编辑$HOME目录下的.profile文件,在其中加入这样一行:
EDITOR=vi;export EDITOR
然后保存退出。

1.创建新的crontab文件(文件名称为dogcron):
如下例:
注意:该文件中所有的注释行要在行首用#来表示
每天12点查找系统中的以.log结尾的文件并删除它们

# find Specified file to remove it everyday at 12:000 12 * * * /bin/find -name "*.log" -exec rm {} \;

2.提交给cron进程

$ crontab  dogcron

3.列出crontab文件并备份:

$ crontab -l >> apps/mycron

以防误删!!!最好备份

4.编辑crontab文件

$ crontab -e

使用vi编辑器其他文件那样修改crontab文件保存并退出

5.删除crontab文件

$ crontab -r

下面再举两个例子来说明:
15 3 1,10,22 * * /apps/tmp/backup.sh
表示每月1、10、22日的3:15运行/apps/tmp目录下的backup.sh
0,30 18-23 * * * /apps/tmp/hello.sh
表示在每天18:00至23:00之前每隔30分钟运行/apps/tmp目录下的hello.sh


at命令

at命令的格式如下:
at [-f script] [-m -l -r] [time] [date]
其中,
-f script :是所要提交的脚本或命令
-l :列出当前所有等待运行的作业
-r :清除作业。
-m :作业完成后给用户发邮件
time :at命令的时间格式非常灵活,比如6.45am May 12 / 11.10pm / now+ 1 hour /9am tomorrow / 15:00 May 24 都可以
date :日期格式可以是月份数或日期数,today、tomorrow也行

一般来说,在提交若干行的系统命令时,我使用at命令提示符方式,而在提交shell脚本时,使用命令行方式,如果你想提交若干行对的命令,可以在at命名了后面跟上日期/时间并回车。然后就进入了at命令提示符,这时
只需要逐条输入相应的命令,然后按Ctrl+D键退出。
举例说明:
1.提交命令:
在明天下午6:00运行运行/apps/tmp目录下的clean.sh的脚本。

$ at 6.00pm tomorrow -f /apps/tmp/clean.sh

2.列出命令,可获取相应的作业标识(第一列):

$ at -l

3.清除作业

$ atrm job <作业标志>

&命令

该命令的一般形式为:
command &

$ command >myout.file 2>&1 &

表示我们执行command命令,且令所有的标准输出和错误输出都重定向到myout.file文件中,提交该进程后,就会显示一个进程号,我们可以用它来监控该进程( ps -ef | grep [process_number]),或者杀死它(kill [process_number])。


nohup命令

该命令的一般形式为:
nuhup command &
使用nohup命令提交作业,那么在缺省情况下该作业的所有输出都被重定向到一个名为nohup.out的文件中,除非另外指定了输出文件:如

$ nohup command > myout.file 2>&1
原创粉丝点击