linux 让任务在后动执行

用nohup命令让Linux下程序永远在后台执行

Unix/Linux下一般想让某个程序在后台运行,很多都是使用 & 在程序结尾来让程序自动运行。比如我们要运行mysql在后台:
/usr/local/mysql/bin/mysqld_safe --user=mysql &
 但是我们很多程序并不象mysqld一样可以做成守护进程,可能我们 程序只是普通程序而已,一般这种程序即使使用 & 结尾,如果终端关闭,那么程序也会被关闭。为了能够后台运行,我们需要使用nohup这个 命令 ,比如我们有个start.sh需要在后台运行,并且希望在后台能够一直运行,那么就使用nohup:
nohup /root/start.sh &
在shell中回车后提示:
[~]$ appending output to nohup.out
原程序的的标准 输出 被自动改向到当前目录下的nohup.out文件,起到了log的作用。

比如:
[root@db mysql]# nohup myisamchk -r -q /data2/mysql/mmclick/mmc_user_info_error.MYI &
[1] 5881
[root@db mysql]# nohup: appending output to `nohup.out'
证明成功执行可关闭SSH
查看服务器后台是否有进程:ps aux |grep myisamchk 
再睇下目录下边的,nohup.out(放在开始执行命令时的相同目录下 )有咩? 如果系0个字节,证明仲未执行完毕

注意:如果您修复的数据表比较大,缓存占用磁盘空间比较大,你必须将缓存指定到大的磁盘目录下:
例如:nohup myisamchk --tmpdir=/data2/mysql -of /data2/mysql/mmclick/mmc_user_info_error.MYI &



但是有时候在这一步会有问题,当把终端关闭后,进程会自动被关闭,察看nohup.out可以看到在关闭终端瞬间服务自动关闭。
咨询红旗Linux工程师后,他也不得其解,在我的终端上执行后,他启动的进程竟然在关闭终端后依然运行。
在第二遍给我演示时,我才发现我和他操作终端时的一个细节不同:他是在当shell中提示了nohup成功后还需要按终端上键盘任意键退回到shell输 入命令窗口,然后通过在shell中输入exit来退出终端;而我是每次在nohup执行成功后直接点关闭程序按钮关闭终端.。所以这时候会断掉该命令所 对应的session,导致nohup对应的进程被通知需要一起shutdown。
附:nohup命令参考

nohup 命令
  用途:不挂断地运行命令。
  语法:nohup Comm and [ 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就是不挂起的意思( n ohang up)。
  该命令的一般形式为:nohup command &
  使用nohup命令提交作业
  如果使用nohup命令提交作业,那么在缺省情况下该作业的所有输出都被重定向到一个名为nohup.out的文件中,除非另外指定了输出文件:
  nohup command > myout. file 2>&1 &
  在上面的例子中,输出被重定向到myout.file文件中。
  使用 jobs 查看任务。
  使用 fg %n 关闭。
  另外有两个常用的ftp工具ncftpget和ncftpput,可以实现后台的ftp上传和下载,这样就可以利用这些命令在后台上传和下载文件

如果不需要输出 日志文件:
nohup  command   & >  /dev/null
程序虽然进入后台,但其标准输入(0)、标准输出(1)、标准错误(2)输出都未关闭,而默认情况下0、1、2是和终端(或伪终端)相关联的。
那些正确设计的daemon程序都会在进入后台之前关闭0、1、2这三个fd,所以不会出现这个问题。
  对于SHELL脚本来说,在合适的位置(进入死循环之前或需长时间运行的命令之前)执行
  exec 1>/dev/null 2>/dev/null 0</dev/null,或者根据需要重定向到其它文件,就可以解决这个问题。
     对于已经写好,且又不想修改它,可以在命令行中做好这个重定向:
       nohup ./program args 0</dev/null 1>/dev/null 2>&1 &
转载: http://hi.baidu.com/lbsloveldm/b ... f18a9f023bf66a.html


不要日志:
nohup <COMMAND> & dev/null</code>

nohup <COMMAND> /dev/null 2>/dev/null &
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值