nohup在后台常驻运行php脚本

 更新时间:2024年03月23日 11:09:59   投稿:yin  
linux中跑一个程序,如果我们退出终端,或者网络不好连接中断,那么程序就会被中止,而这个情况肯定不是我们想看到的,要让PHP程序在Linux后台执行,可以使用nohup命令配合&符号,nohup命令可以使进程在用户注销后继续运行,&可以将进程放到后台执行

脚本之家 / 编程助手:解决程序员“几乎”所有问题!
脚本之家官方知识库 → 点击立即使用

nohup是什么

nohup是Linux和Unix系统中的一个命令,其作用是在终端退出时,让进程在后台继续运行。它的全称为“no hang up”,意为“不挂起”。nohup命令可以让你在退出终端或关闭SSH连接后继续运行命令。

nohup语法规则

nohup命令的基本语法如下:

1

nohup COMMAND [ARGS ...] [> output-file 2> error-file] &

其中的参数含义如下:

  • COMMAND:需要在后台运行的命令或脚本。
  • ARGS:命令或脚本的参数。
  • > output-file:输出重定向到指定的文件中。
  • 2> error-file:错误信息重定向到指定的文件中。
  • &:将命令放在后台运行。

nohup命令的执行过程分为以下几个步骤:

  • nohup命令将当前shell的标准输入、标准输出和标准错误输出全部重定向到/dev/null设备中,避免被关闭终端的信号所中断。
  • nohup命令将进程放到后台执行,并将进程的PID输出到终端。
  • 进程开始执行,并将标准输出和标准错误输出重定向到指定的文件中。
  • 用户可以退出终端或关闭终端窗口,进程仍然在后台运行。

在工作中,我们很经常跑一个很重要的程序,有时候这个程序需要跑好几个小时,甚至需要几天,这个时候如果我们退出终端,或者网络不好连接中断,那么程序就会被中止。而这个情况肯定不是我们想看到的,我们希望即使终端关闭,程序依然可以在跑。

要让PHP程序在Linux后台执行,可以使用nohup命令配合&符号。nohup命令可以使进程在用户注销后继续运行,&可以将进程放到后台执行。

nohup 命令是英语词组 no hangup 的缩写,意思是不挂断,也就是指程序不退出。这个命令会使程序忽略 HUP 信号,保证程序能够正常进行。HUP 信号有些人可能比较陌生,它是在终端被中止的时候向它所关联的进程所发出的信号,进程收到这个信号后就会中止运行。所以如果你不希望进程被这个信号干掉的话,就可以忽略这个信号。而 nohup 命令做的就是这个事情。

php程序在linux后台执行

1
命令:nohup php socket.php &

这样关闭终端也不会断开了
在项目目录会生成一个nohup.out文件,记录着所有信息和异常
要关闭的话使用:

1
2
ps aux | grep php
netstat -anp | grep (端口号)

查看PID,然后使用:kill (PID)

1、用nohup在后台常驻运行php脚本:

1
nohup php -f /www/wwwroot/default/redis_subscribe.php &

2、查看进程:

1
ps -ef|grep redis_subscribe.php

3、查看所有进程:

4、查看某一进程:

5、终止进程:

nohup命令常用方法

使用nohup命令启动一个程序

如果你需要运行一个程序,即使对应的 Shell 被退出后依然保持运行,可以这样使用 nohup 运行这个程序:

当这个程序进行起来之后,这个程序对应的 log 输出及其错误日志都将被记录在 nohup.out 文件里,这个文件一般位于家目录或者当前目录。

重定向程序的输出

如果我不想把程序的输出保存在家目录或者当前目录,我想保存在我指定的路径,并且自定义文件名,要怎么操作?这时我们就可以使用重定向操作 > 。

比如,我现在有个脚本 myScript.sh 我想把它的输出保存在家目录下的 output 目录下,文件名为 myOutput.txt ,可以这样运行:

1
$ nohup ./myScript.sh > ~/output/myOutput.txt

使用nohup命令后台启动一个程序

如果想让程序在后台运行,可以加上 & 符号。但这样运行之后,程序就无影无踪了。想要让程序重新回到终端,可以使用 fg 命令。

这个命令的输出 log 将保存在 nohup.out 文件里,你可以使用 cat 或其它命令查看。第二行里 8699 这个数字代表这个命令对应的进程号,也就是 pid 。我们可以使用 ps 命令来找到这个进程。

使用nohup同时运行多个程序

如果你需要同时跑多个程序,没必要一个个运行,直接使用 && 符号即可。比如,你想同时跑 mkdir ,ping,ls 三个命令,可以这样运行:

1
$ nohup bash -c 'mkdir files &&ping -c 1 baidu.com && ls'> output.txt

终止跑在后台的进程

上面有提到,nohup 命令结合 & 符号可以使进程在后台运行,即使关闭了终端依然不受影响。这时,如果想要终止这个进程,要怎么操作呢?

最简单的当属 kill 命令,相信大家用过很多次了。

那要如何找到进程对应的 pid 呢?我们可以使用 ps 命令。

1
$ ps aux | grep myScript.sh

或者你使用 pgrep 命令也行。

接下来,再使用 kill 命令就可以终止该进程了。

总结

到此这篇关于nohup在linux后台常驻运行php脚本的文章就介绍到这了,更多相关php程序在linux后台执行内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

蓄力AI

微信公众号搜索 “ 脚本之家 ” ,选择关注

程序猿的那些事、送书等活动等着你

相关文章

  • Laravel 5框架学习之模型、控制器、视图基础流程

    Laravel 5框架学习之模型、控制器、视图基础流程

    本文给大家介绍的是Laravel5框架中模型、控制器、视图的基础流程,其实MVC体系结构模式将一个交互式系统分为三个组件。模型包含核心功能和数据。视图向用户显示信息。控制器处理用户输入。视图和控制器共同构成了用户接口。
    2015-04-04
  • PHP类的自动加载机制实现方法分析

    PHP类的自动加载机制实现方法分析

    这篇文章主要介绍了PHP类的自动加载机制实现方法,结合实例形式分析了__autoload方法进行类自动加载操作的相关实现技巧与使用注意事项,需要的朋友可以参考下
    2019-01-01
  • CodeIgniter集成smarty的方法详解

    CodeIgniter集成smarty的方法详解

    这篇文章主要介绍了CodeIgniter集成smarty的方法,结合实例形式详细分析了CodeIgniter集成Smarty的具体步骤与相关注意事项,需要的朋友可以参考下
    2016-05-05
  • CentOS下与Apache连接的PHP多版本共存方案实现详解

    CentOS下与Apache连接的PHP多版本共存方案实现详解

    这篇文章主要介绍了CentOS下与Apache连接的PHP多版本共存方案实现,针对mod_fcgi模块的配置作了一些说明,需要的朋友可以参考下
    2015-12-12
  • php加密解密实用类分享

    php加密解密实用类分享

    加密和解密是一项常规任务,这里介绍一个加解密类。如果你想在用户忘记密码时为他或她找回原来的密码,那么这个类是个好用的工具
    2014-01-01
  • Laravel 简单实现Ajax滚动加载示例

    Laravel 简单实现Ajax滚动加载示例

    今天小编就为大家分享一篇Laravel 简单实现Ajax滚动加载示例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-10-10
  • Laravel使用原生sql语句并调用的方法

    Laravel使用原生sql语句并调用的方法

    今天小编就为大家分享一篇Laravel使用原生sql语句并调用的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-10-10
  • PHP中通过exec调用python脚本报ModuleNotFoundError错误问题及解决方法

    PHP中通过exec调用python脚本报ModuleNotFoundError错误问题及解决方法

    这篇文章主要介绍了解决php中通过exec调用python脚本报ModuleNotFoundError错误,本文是在 Ubuntu 20.04 上以 ubuntu 用户身份进行的测试,需要的朋友可以参考下
    2023-07-07
  • ThinkPHP模版中导入CSS和JS文件的方法

    ThinkPHP模版中导入CSS和JS文件的方法

    这篇文章主要介绍了ThinkPHP模版中导入CSS和JS文件的方法,分析了使用import标签与load标签实现css和js文件导入的技巧,需要的朋友可以参考下
    2014-11-11
  • Thinkphp实现站点静态化的方法详解

    Thinkphp实现站点静态化的方法详解

    本篇文章主要介绍了Thinkphp实现站点静态化的方法,thinkphp提供了一个有效的生成静态页的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
    2017-03-03

最新评论