linux后台运行shell脚本

在UNIX上后台运行任务(Shell),bg还是nohup 
有时候一个任务运行的时间很长,需要将其放在后台运行,否则推出控制台后任务就会被终止,本文讲解一下怎么让任务在后台运行。

比如一个shell脚本,longjobs.sh运行要很长时间,并且运行中有信息打印到控制台。

1,如果直接通过 ./longjobs.sh启动了任务,这时候控制台不断有信息打印出来,如果想把该任务调到后台,可以通过Ctr+z(在bash中(Linux的默认shell,如果是在其他Unix系统中,需要在启动任务之前
通过bash命令切换到bash,或者ksh切换到ksh,不是所有的shell都支持Ctr+z))将任务暂停。

2,通过命令bg 将任务调到后台。(但是由于不断有信息打印到控制台,所有实际上这时候也没法在控制台上工作,这时候如果退出控制台,任务也会被结束。)


因此,在unix中运行shell任务的时候最好要将打印到屏幕的信息从新定向到文件中,1,./longjobs.sh>longjobs.out,2,Ctr+z,3,bg 调到后台,这是后退出控制台,

(从bash中退出exit,回到默认的shell,退出控制台(关掉putty,任务会继续执行),但是如果在还处于bash的时候就关掉putty,任务会终止】

所以,如果想把任务放在后台一直运行,不应该依赖bg来实现,而应该通过nohup来实现:(而且在所有的shell中都可行)。

该命令的一般形式为:nohup command &
在缺省情况下该作业的所有输出都被重定向到一个名为nohup.out的文件中,也可以另外指定了输出文件,如下:

nohup   ./longjobs.sh > longjobs.out 2>&1 &


nohup的意思在终端断开(hang up)的时候,服务器端仍然运行,注意要在nohup命令运行后按任意键回到shell提示符后再断开.

这里再补充一点&& 和&的区别

&&是用来在一次执行两个命令 cmd1 && cmd2,如果前面的cmd1运行成功,则继续运行cmd2,否则cmd2不运行.

date && time,两个命令都执行.

datq && time,两个命令都不执行,因为datq不存在.(而datq;time则会datq失败,time正常运行)

另外,||的作用正好与&&相反。

第一种方法举例:
[root@primary ~]# ./ping.sh > ping.out                           (ctrl +z)

[1]+   Stopped                 ./ping.sh > ping.out
[root@primary ~]# jobs
[1]+   Stopped                 ./ping.sh > ping.out
[root@primary ~]# bg 1
[1]+ ./ping.sh > ping.out &
[root@primary ~]# ps -ef|grep ping
root     27909     1   0 Mar22 ?         00:00:00 /usr/libexec/mapping-daemon
root     30682 29695   0 15:37 pts/3     00:00:00 /bin/bash ./ping.sh
root     30738 29695   0 15:38 pts/3     00:00:00 grep ping



方法二举例:
[root@ziteng ~]# nohup   ./ping.sh > ping.out 2>&1 &
[1] 11935


nohup详解:
nohup 命令
用途:LINUX命令用法,不挂断地运行命令。
语法:nohup Command [ Arg ... ] [ & ]
描述:nohup 命令运行由 Command参数和任何相关的 Arg参数指定的命令,忽略所有挂断(SIGHUP)信号。在注销后使用 nohup 命令运行后台中的程序。要运行后台中的 nohup
  命令,添加 & ( 表示“and”的符号)到命令的尾部。
如果不将 nohup 命令的输出重定向,输出将附加到当前目录的 nohup.out 文件中。如果当前目录的 nohup.out 文件不可写,输出重定向到 $HOME/nohup.out 文件中。如果没有
文件能创建或打开以用于追加,那么 Command 参数指定的命令不可调用。如果标准错误是一个终端,那么把指定的命令写给标准错误的所有输出作为标准输出重定向到相同的文件
描述符。
退出状态:该命令返回下列出口值:
126 可以查找但不能调用 Command 参数指定的命令。
127 nohup 命令发生错误或不能查找由 Command 参数指定的命令。
否则,nohup 命令的退出状态是 Command 参数指定命令的退出状态。
nohup命令及其输出文件
nohup命令:如果你正在运行一个进程,而且你觉得在退出帐户时该进程还不会结束,那么可以使用nohup命令。该命令可以在你退出帐户/关闭终端之后继续运行相应的进程。
nohup就是不挂断的意思( no hang up)。
该命令的一般形式为:nohup command &
使用nohup命令提交作业
如果使用nohup命令提交作业,那么在缺省情况下该作业的所有输出都被重定向到一个名为nohup.out的文件中,除非另外指定了输出文件:
nohup command > myout.file 2>&1 &
在上面的例子中,输出被重定向到myout.file文件中。
使用 jobs 查看任务。
使用 fg %n 关闭。
另外有两个常用的ftp工具ncftpget和ncftpput,可以实现后台的ftp上传和下载,这样我就可以利用这些命令在后台上传和下载文件了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值