我的脚本需要 root 权限,我想在远程计算机上运行它,然后能够关闭我的本地计算机。
所以我做了: $ nohup sudo ./myScript arg1 &
...我总是这样做,但是在另一台机器上我总是 root,所以没有sudo. 由于某种原因现在它不起作用:
nohup sudo ./myScript.sh 1 & //then I press enter twice
[8] 24264
me@my-laptop:~/myFolder$ nohup: ignoring input and appending output to `nohup.out'
[8]+ Stopped nohup sudo ./myScript.sh 1
Run Code Online (Sandbox Code Playgroud)
我在这里做错了什么?
我在想我的run.py脚本是否可以以两种不同的模式运行。当处于nohup模式时:nohup python run.py &,就像完整日志输出模式一样。但是在正常模式下python run.py,就像日志抑制模式一样。因此对于用户来说它将是整洁和清晰的。
所以我的问题:我的可运行 python 脚本如何知道自己在 nohup 模式或正常模式下运行?
在远程服务器中,我有一个脚本test.sh,如:
#!/bin/bash
echo "I'm here!"
nohup sleep 100&
Run Code Online (Sandbox Code Playgroud)
从本地,我运行'fab runtest'来调用远程test.sh.
def runtest():
run('xxxx/test.sh')
Run Code Online (Sandbox Code Playgroud)
我可以得到输出"我在这里!",但我无法在远程服务器中找到睡眠过程.我错过了什么?
谢谢!
我在Linux服务器上运行一个python脚本,其中包含nohup:
nohup python3 ./myscript.py > ./mylog.log &
Run Code Online (Sandbox Code Playgroud)
它工作,脚本写日志文件,但问题是python错误消息/抛出异常似乎没有写入日志文件.我怎么能实现这个目标?
这与stderr有关吗?(但是当我启动脚本时,它说:"nohup:将stderr重定向到stdout".)
这是一个长时间运行的脚本,过了一段时间,有时脚本因为某些问题而停止工作,并且缺少错误消息,我不知道为什么.问题总是在几天后发生,所以调试真的很麻烦.
编辑:它可能与flush有关吗?由于我自己的打印使用flush但可能python错误不会这样,一旦脚本中止它们就不会出现在文件中?
在我使用nohup启动它之后,如何监视仍在运行的作业(我猜是分离的?),退出服务器并重新登录?通常情况下,我jobs -l会查看正在运行的内容,但这显示为空白.
如何nohup在PowerShell中模拟unix命令的行为?那是nohup my-other-nonblocking-command.我注意到了这个Start-Job命令,但是语法对我来说有点不清楚.
我有一个bash脚本,包含一个子目录列表循环.在循环内我cd进入每个子目录,运行命令nohup然后cd退出.在下面的示例中,echo为了简单起见,我已将命令替换为可执行文件.
#!/bin/bash
dList=("dname1" "dname2" "dname3")
for d in $dList; do
cd $d
nohup echo $d &
cd ..
done
Run Code Online (Sandbox Code Playgroud)
以上结果导致nohup在第一个循环期间挂起,输出如下:
$ ./script.sh
./dname1
$ nohup: appending output to `nohup.out'
Run Code Online (Sandbox Code Playgroud)
脚本不会继续循环,要在命令行上再次键入,必须按回车键.好的,这是nohup在shell上使用它时的正常行为,但显然它对我的脚本不起作用.我怎样才能nohup简单地运行然后优雅地允许脚本继续?
我已经(不成功)尝试了nohup命令的变种,包括
nohup echo $d < /dev/null &
Run Code Online (Sandbox Code Playgroud)
但这没有帮助.此外,我尝试包括
trap "" HUP
Run Code Online (Sandbox Code Playgroud)
在脚本的顶部,但这也没有帮助.请帮忙!
编辑:正如@anubhava正确指出我的循环包含一个错误,导致脚本只使用数组中的第一个条目.这是更正后的版本.
#!/bin/bash
dList=("dname1" "dname2" "dname3")
for d in ${dList[@]}; do
cd $d
nohup echo $d &
cd ..
done
Run Code Online (Sandbox Code Playgroud)
所以现在脚本实现了我想要的.但是,我们仍然从nohup那里得到令人讨厌的输出,这是我原来问题的一部分.
我在http://talkwithstranger.com/ 上运行我的应用程序,并将它部署在 AWS EC2 上。我用这个命令
sudo nohup node index.js &
Run Code Online (Sandbox Code Playgroud)
即使我关闭终端并退出我的 SSH,也要继续运行我的 Node JS 服务器。
但是,每次醒来2天后,我发现节点服务器本身会自动停止。我通过使用检查了正在运行的进程
ps -ef
Run Code Online (Sandbox Code Playgroud)
我的节点脚本不存在。
谷歌浏览器说未找到站点 DNS,因为 NodeJS Express 当然没有运行来提供我的 html 文件,但为什么它会自行停止?
是什么导致我的服务器在每 2 天后意外关闭?我必须nohup再次手动运行才能再次运行它。
nohup 是否有过期时间之类的?
我在SO上发现的其他示例中尝试的所有内容似乎均不起作用。我正在尝试使用nohup运行我的应用程序,但是将应用程序的输出附加到文件中。
我尝试了以下一些方法。似乎都不起作用。
nohup dotnet application.dll &> out.log &
nohup dotnet application.dll > out.log 2>&1 &
nohup dotnet application.dll > /opt/out.log &
Run Code Online (Sandbox Code Playgroud)
我总是收到类似
-bash: out.log: Permission denied
Run Code Online (Sandbox Code Playgroud)
我尝试使用sudo运行该应用程序,但它似乎仍然无法正常工作。
nohup dotnet application.dll &
Run Code Online (Sandbox Code Playgroud)
效果很好,但是它将输出定向到其他目录,例如 /home/ubuntu/nohup.out
我究竟做错了什么?
我已经阅读了很多关于使用nohup,forever和pm2保持节点在后台运行的帖子.但我仍然不确定哪个是最佳选择,并希望得到一些指导.
背景 - 在使用Ubuntu版本16的Apache服务器上运行MEAN堆栈应用程序.App.js位置是/ var/www /.当我退出终端时,我正在使用永远使应用程序在后台运行.我明白,如果我使用nohup,命令就是
nohup node /var/www/<project_name>/app.js > stdout.txt 2> stderr.txt &
Run Code Online (Sandbox Code Playgroud)
我想要确保的是,无论1)我如何退出终端(通过键入exit或只是单击右上角的X)和2)部署应用程序的操作系统,没有后台服务将以某种方式终止当我退出终端时,这会破坏我的应用程序.为此,运行应用程序的最佳方法是什么?nohup,forever还是pm2?我也明白有些人永远偏爱pm2.pm2提供什么比永远不提供?