您的位置:首页 > 运维架构 > Shell

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

2017-12-06 18:31 357 查看
当你在终端或控制台工作时,可不希望一个作业一直霸占着整个屏幕,因为可能还有别的事情要做。这个时候,我们就想着说让进程能在后台运行就完美了。

下面有几种方法可供选择:

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:00
0 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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: