Linux下使用nohup实现在后台运行程序

   今天遇见一个需求,需要统计一下今年一直到现在手机端的微信登陆用户量,写这样一个脚本并不难,我像以前一样使用: /usr/local/bin/php  jiaoben.php,执行这样一个命令就可以正常的运行这个脚本,首先这个方法并不错但是有一个欠缺的地方就是,这个脚本的执行的时间会很长,因为统计的数据包含三个产品的微信用户登录用户量,这个一个脚本文件里面需要执行三个脚本程序,并且包含的数据表也比较多,预期这个脚本文件需要半天时间。那么如果还是用上面的那种方法去执行的话,这中间可能因为各种远程导致ssh链接中断或者终端被关闭,这样都会导致脚本运行结束,所以,现在需要能不能把这个脚本文件的执行变成后台模式,就是说当ssh连接中断或终端被关闭脚本都会执行。

    有了这样一个需求,认识了Linux下另外一个命令 nohup:

   0、nohup命令:

    如果你正在运行一个程序,而且你希望在中断ssh连接或退出账户时该程序还不会结束,那么就可以使用nohup命令。该命令可以在你中断ssh连接或关闭终端或退出账户之后继续运行相应的进程。nohub就是不挂起的意思(no hanup)

   1、用途:

     不挂断地运行命令。

   2:语法:

      nohup Command  [Arg。。。。] &

      具体到 文章开始我说的那个场景的时候是这样执行的:

      例子:nohup /usr/local/bin/php jiaoben.php

       当执行完该条命令后在shell中回车后提示: appending output to nohup.out 证明运行成功,同时把程序运行的输出信息放到当前目录的nohup.out中去

   下面我们开始说一下"appending output to nohup.out" 这个提示:首先这个提示表示  nohup 命令执行成功。然后你还会发现在和脚本文件同一级目录下会多出一个文件,对,文件名正式nohup.out,从提示的字面意思翻译过来是:将输出追加到nohup.out这个文件,我们知道我们程序里面可能需要输出一些东西比如php的echo ,这句话的意思就是使用nohup命令之后程序中的输出信息默认情况下会被输出到nohup.out这个文件里面,当然我们也可以指定输出文件,这样需要执行下面的命令格式:
       nohup command > myout.file 2>&1 &

      具体到当前场景:nohup /usr/local/bin/php jiaoben.php > myout.file 2>&1 &

     该条命令的意思是:将脚本文件里面的程序输出到指定的myout.file文件里面

     jobs命令:

   使用该命令我们可以查看有多少在后台运行的命令,jobs -l 选项可以显示所有任务的PID,jobs的状态的可以是running、stopped、Terminated(终止)。但是如果任务被终止了(kill),shell就会从当前的shell环境已知中删除任务的进度标识

  注意:使用了nohup之后,很多就这样不管了,其实这样有可能在当前账户非正常退出或结束的时候,命令还是自己结束了。所以在使用nohup命令后台运行命令之后,需要使用exit正常退出当前账户,这样才能保证命令一直在后台运行

  另外再介绍几个命令:

  1、Ctrl  + z 

      可以将一个在前台执行的命令放到后台,并且处于暂停状态

  2、Ctrl + c 终止前台命令

  3、bg 

     将一个在后台暂停的命令,变成在后台继续执行。如果后台中有多个命令,可以使用bg %jobnumber将选中的命令调出

    先在前台运行一个脚本,然后转到后台,查看后台作业情况:

  

    4、将后台中的命令调至前台继续运行,如果后台有多个命令,可以使用fg %jonumber (是命令编号,不是进程编号,将选中的命令调出:

  

猜你喜欢

转载自blog.csdn.net/hpu_yly_bj/article/details/81083844