我正在寻找最好的,或任何方式真正从后台启动PHP的过程,所以我可以在以后的脚本中杀死它.
现在,我正在使用:shell_exec($ Command); 这个问题是它等待程序关闭.
当我执行shell命令时,我想要一些与nohup具有相同效果的东西.这将允许我在后台运行该过程,以便稍后在脚本中可以关闭它.我需要关闭它,因为此脚本将定期运行,并且程序运行时无法打开.
我曾想过生成一个.bat文件来在后台运行命令,但即便如此,我如何在以后杀死该进程?
我见过的linux代码是:
$PID = shell_exec("nohup $Command > /dev/null & echo $!");
// Later on to kill it
exec("kill -KILL $PID");
Run Code Online (Sandbox Code Playgroud)
编辑:结果我不需要杀死进程
我有一个基于Apache Mina用Java编写的网络操作的应用服务器.最近我在日志文件中遇到了一个奇怪的行为.我注意到日志文件中充满了@ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ ....字符.我的意思是那些意想不到的字符是大量的,因此日志文件在几个小时内获得数百GB!我对这个问题一无所知,谷歌几乎不可能.可能是什么原因?那些角色对任何人都熟悉吗?
如果需要,我可以提供有关应用程序的更多详细信
提前致谢.
当程序以nohup运行时,幕后执行的操作是什么?
父进程的PID是否正在更改?
谢谢.
编辑:我知道nohup(和disown)导致如果父进程收到SIGHUP,则不会将SIGHUP发送到进程.这是否意味着它等同于处理SIGHUP(实际上忽略它)?
我尝试在后台运行php进程,并从php文件启动它.
一些信息:PHP版本5.2.17,php safe_mode关闭,linux系统.我用exec启动进程,已经尝试过shell_exec.我将所有文件设置为0755,0777.
$pid = exec("nohup $cmd > /dev/null 2> /dev/null & echo $!");
Run Code Online (Sandbox Code Playgroud)
如果我打印这个声明,我得到这个和pid是可以的:
nohup /usr/local/bin/php5 /.../../file.php > /dev/null 2> /dev/null & echo $!
Run Code Online (Sandbox Code Playgroud)
如果我在ssh下查找进程
top
Run Code Online (Sandbox Code Playgroud)
我看到我的php5进程正确的pid.用户是root
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
3533 xxxxxxxx 20 0 21356 8868 4580 S 0 0.4 0:00.13 php5
3536 xxxxxxxx 20 0 20836 8260 4428 S 0 0.4 0:00.09 php5
3539 xxxxxxxx 20 0 20836 8260 4428 S 0 0.4 0:00.09 php5
3542 xxxxxxxx 20 0 …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用nohup运行脚本,但该命令恰好采用变量$*的整行参数.我尝试运行这样的命令:
nohup time ./build_all all &
Run Code Online (Sandbox Code Playgroud)
但这在nohup.out中给了我以下错误:
./build_all: DISPLAY=ted:0.0: is not an identifier
Run Code Online (Sandbox Code Playgroud)
任何帮助赞赏.
摊晒
================================================== ================================
我意识到Peter John Acklam是对的.错误不是因为nohup,而是因为脚本,我不确定我做错了什么,因为语法似乎对我来说是正确的.当我自己运行脚本时,我没有看到错误,但是当我尝试使用nohup运行时,我看到了奇怪的错误,这也有点奇怪.
无论如何,脚本的开头看起来像这样:
#!/bin/bash
export DISPLAY=ted:0.0 # sets the display
export RELEASE=v1.0
node=`uname -n`
Run Code Online (Sandbox Code Playgroud) 我正在尝试运行一串nohup命令来获取服务器统计信息.但是我收到"没有这样的文件或目录"的错误.请注意,3个nohup调用嵌入在通过cron作业执行的脚本中.第一个nohup工作,但另外2个返回错误.具有讽刺意味的是,当在不同的服务器上运行时,脚本运行正常.
命令
nohup vmpstat -a -n 60 1000 > myvmstats
Run Code Online (Sandbox Code Playgroud)(作品)
nohup mpstat -P ALL 1 1000 > mympstats
Run Code Online (Sandbox Code Playgroud)(返回:nohup无法运行命令mpstat:没有这样的文件或目录)
nohup iostat -t -x 60 1000 >myiostats
Run Code Online (Sandbox Code Playgroud)(返回:nohup无法运行命令iostat:没有这样的文件或目录)
知道什么是错的吗?
我正在使用远程系统,我使用Pycharm远程窗口来编辑和运行我的脚本.
我登录使用
ssh -Y myName@myMachine
Run Code Online (Sandbox Code Playgroud)
然后我从终端运行Pycharm.
我想以这样的方式从Pycharm运行我的脚本,如果我关闭它(甚至可能从ssh会话注销),进程仍然会运行.
我试图使用选项"分离而不终止进程"退出Pycharm.这导致python进程显示在以下列表中:
ps -all
Run Code Online (Sandbox Code Playgroud)
但是,它会停止写入文件.当pycharm打开时,进程通常每隔几秒就写入一个文件.当从pycharm脱离它显示的过程(注销和重新登录它显示与未知TTY PS -x之后)就行了,但它停止在这个意义上工作,它不再追加任何输出文件,它通常应.
可能导致什么呢?我怎样才能解决这个问题?
我已经运行了docker ubuntu容器,里面只有一个bash脚本.我想用docker exec在那个容器内启动我的应用程序:
docker exec -it 0b3fc9dd35f2 ./main.sh
Run Code Online (Sandbox Code Playgroud)
在主脚本里面我想用nohup运行另一个应用程序,因为这是一个运行时间很长的应用程序:
#!/bin/bash
nohup ./java.sh &
#with this strange sleep the script is working
#sleep 1
echo `date` finish main >> /status.log
Run Code Online (Sandbox Code Playgroud)
java.sh脚本如下(为简单起见,它是一个虚拟脚本):
#!/bin/bash
sleep 10
echo `date` finish java >> /status.log
Run Code Online (Sandbox Code Playgroud)
问题是在docker exec返回后java.sh被立即杀死.问题是为什么?
我发现的唯一解决方案是sleep 1在nohup启动后在第一个脚本中添加一些虚拟.比第二个进程运行正常.你知道为什么会这样吗?
[编辑]
第二种解决方案是在睡眠前向脚本添加一些echo或trap命令java.sh.比它工作正常.不幸的是我不能使用这个解决方法而不是这个脚本我有java进程.
我正在使用 nohup 命令运行 Java 应用程序。
nohup java -jar test.jar
Run Code Online (Sandbox Code Playgroud)
我正在使用log4j从我的应用程序中写入输出。在 log4j.properties 文件中,我有一个写入输出的文件。问题是我在 nohup.out 和 test.log 中有两次相同的输出(我在 log4j.properties 文件中配置了这个)
有没有办法禁止将输出写入 nohup.out?
我有一个运行gradle build这样的脚本......
$HOME_DIR$CODE_DIR/gradlew -p $HOME_DIR$CODE_DIR build
Run Code Online (Sandbox Code Playgroud)
当我定期运行./start.local.sh它时,它工作正常。但是当我尝试像nohup ./start.local.sh &我一样使用 nohup 时......
Exception in thread "DisconnectableInputStream source reader" org.gradle.api.UncheckedIOException: java.io.IOException: Bad file descriptor
at org.gradle.internal.UncheckedException.throwAsUncheckedException(UncheckedException.java:57)
at org.gradle.internal.UncheckedException.throwAsUncheckedException(UncheckedException.java:40)
at org.gradle.util.DisconnectableInputStream$1.run(DisconnectableInputStream.java:125)
at java.base/java.lang.Thread.run(Thread.java:844)
Caused by: java.io.IOException: Bad file descriptor
Run Code Online (Sandbox Code Playgroud)
我错过了什么?