以下为什么不工作?
$ alias sayHello='/bin/echo "Hello world!"'
$ sayHello
Hello world!
$ nohup sayHello
nohup: appending output to `nohup.out'
nohup: cannot run command `sayHello': No such file or directory
Run Code Online (Sandbox Code Playgroud)
(我问这个问题的原因是因为我把我perl和python不同的perl/python二进制混淆了,这些二进制文件是为了我自己的目的而优化的;但是,如果我不提供perl/python二进制文件的完整路径,nohup会给我带来麻烦)
我正在编写我的第一个NodeJS应用程序,但出于某种原因,它似乎在很短的时间后意外死亡.我不知道是什么原因造成的.该过程运行良好,甚至按预期工作,然后由于某种原因它只是停止.nohup日志不显示错误或任何反馈.
我试过在调试模式下运行它,但它是相同的,没有信息.跟踪没有帮助.
我通过nohup运行这个过程:
nohup node app.js &
Run Code Online (Sandbox Code Playgroud)
码:
var http = require('http');
var server = http.createServer().listen(8000);
var io = require('socket.io').listen(server);
var cookie_reader = require('cookie');
var querystring = require('querystring');
// Store the session cookie set by Django
io.configure(function(){
io.set('authorization', function(data, accept){
if(data.headers.cookie){
data.cookie = cookie_reader.parse(data.headers.cookie);
return accept(null, true);
}
return accept('error', false);
});
io.set('log level', 1);
});
io.sockets.on('connection', function (socket) {
socket.on('shoutbox_send', function(message){
values = querystring.stringify({
comment: message,
sessionid: socket.handshake.cookie['sessionid'],
});
try {
var options = {
host: 'www.example.com',
port: 80, …Run Code Online (Sandbox Code Playgroud) 我正在尝试与主管一起开始服务,但我得到一个错误说
INFO spawnerr:为'app_name'制作调度程序的未知错误:EACCES
这是我的supervisord.conf文件:
[supervisord]
logfile=/tmp/supervisord.log
logfile_maxbytes=50MB ; change these depending on how many logs
logfile_backups=10 ; you want to keep
loglevel=info
pidfile=/tmp/supervisord.pid
nodaemon=true
minfds=1024
minprocs=200
[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
[supervisorctl]
serverurl=unix:///tmp/supervisor.sock socket
[program:myscript]
command= python -u /home/ubuntu/appfolder/app_name.py
autostart=true
autorestart=unexpected
redirect_stderr=true
stdout_logfile=/var/log/app_name.log
Run Code Online (Sandbox Code Playgroud) 我认为有很多类似的帖子,但我在搜索后还没有找到解决方案.
基本上,我正在尝试在后台运行两个脚本.当我在命令行中运行它们时,我在调用我的第一个脚本后看到:
/usr/bin/nohup php script.php > nohupoutput.log & echo $!
Run Code Online (Sandbox Code Playgroud)
我尝试 ...script.php > /dev/null &过同样的结果.我明白了:
/usr/bin/nohup: ignoring input and redirecting stderr to stdout
Run Code Online (Sandbox Code Playgroud)
我忽略并运行第二个.我注意到它似乎挂在那里,并按下Enter让我回到machine:~folder>
/usr/bin/nohup php script2.php > nohupoutput.log & echo $!
Run Code Online (Sandbox Code Playgroud)
两个脚本都有效.我试图将其转换为shell_exec命令,似乎没有任何工作.我怀疑这个ignoring input位造成了困难,但我不确定.无论如何,以下不起作用.它只是挂在浏览器中:
$output = shell_exec('/usr/bin/nohup php script.php > /dev/null &');
$output = shell_exec('/usr/bin/nohup php script2.php > /dev/null &');
Run Code Online (Sandbox Code Playgroud) 击:
$nohup sleep 10 &
Run Code Online (Sandbox Code Playgroud)
但当我关闭终端时:

有任何想法吗?理想情况下,我想在后台运行Mongodb.
我使用以下命令在Centos中运行服务器可执行文件"nohup server &".现在我需要杀死这个过程"server".但我尝试了"ps -a"命令,PID但我无法得到这个过程.现在如何杀死"server"现在?
我遇到了一些我不知道如何解决的奇怪问题。我正在使用 CodeDeploy 将我的应用程序部署到 AWS EC2 实例,在那里我需要指定一个脚本来在我的实例上执行进程,其中一个是 .NET Core 应用程序。
我正在dotnet publishWindows 上发布我的应用程序,并将所需的 dll 复制到 EC2 Linux 实例。
我可以使用该应用程序正常运行,并且其行为符合预期
sudo dotnet application.dll
Run Code Online (Sandbox Code Playgroud)
但是,这只是在我终止应用程序并且不在后台之前。
当我尝试在后台运行我的应用程序时出现问题,以便我可以继续运行其他应用程序或执行其他任务。
我通常使用screen或nohup在后台运行应用程序,但它似乎不适用于此应用程序。Screen 在脚本中不起作用,nohup 运行应用程序,但抛出错误
要使用我正在使用的 nohup 运行sudo nohup dotnet application.dll &,我在日志中收到错误
Unhandled Exception: System.UnauthorizedAccessException: Access to the path is denied. ---> System.IO.IOException: Bad file descriptor
--- End of inner exception stack trace ---
at Interop.ThrowExceptionForIoErrno(ErrorInfo errorInfo, String path, Boolean isDirectory, Func`2 errorRewriter)
at Interop.CheckIo(Int64 result, String path, Boolean isDirectory, Func`2 …Run Code Online (Sandbox Code Playgroud) 我想通过ssh在远程计算机上使用nohup启动进程.问题是如何使用nohup启动进程的PID,因此"进程实际上正在做某事",而不是某些外壳实例等.另外,我想将stdout和stderr存储在文件中,但这不是问题所在......
在本地,它完美无瑕地使用
nohup sleep 30 > out 2> err < /dev/null & echo $!
Run Code Online (Sandbox Code Playgroud)
它回应了我命令"sleep 30"的确切PID,我也可以看到使用"top"或"ps aux | grep sleep".
但我无法通过ssh远程执行此操作.我试过类似的东西
ssh remote_machine 'nohup bash -c "( ( sleep 30 ) & )" > out 2> err < /dev/null'
Run Code Online (Sandbox Code Playgroud)
但我无法弄清楚在哪里放置"echo $!" 以便它显示在我的本地shell中.它总是向我显示错误的PID,例如"bash"实例之一等.
有人知道如何解决这个问题吗?
编辑:好的,这里可能不需要"bash -c".就像Lotharyx指出的那样,我得到了正确的PID
ssh remote 'nohup sleep 30 > out 2> err < /dev/null & echo $!'
Run Code Online (Sandbox Code Playgroud)
但问题是,如果你用产生输出的东西代替"sleep 30",比如"echo Hello World!",那么输出不会在文件"out"中结束,既不在本地也不在远程.有人知道为什么?
编辑2:我的错!另一台设备上没有剩余空间,这就是文件"out"和"err"保持空的原因!
所以这是有效的.另外,如果想要连续调用多个命令,用分号(;)分隔,则仍然可以使用"bash -c",如下所示:
ssh remote 'nohup bash -c "echo bla;sleep 30;echo blupp" > out 2> err < …Run Code Online (Sandbox Code Playgroud) 我有一个脚本来处理某些文件中的记录,通常需要1-2个小时.当它运行时,它会打印处理的记录数量的进度.
现在,我想要做的是:当它运行时nohup,我不希望它打印进度; 它应该只在手动运行时打印进度.
我的问题是如何知道bash脚本是否正在运行nohup?
假设命令是nohup myscript.sh &.在脚本中,如何nohup从命令行获取?我尝试使用$0,但它给了myscript.sh.
nohup command &可以在关闭终端后保持命令运行。我想播放目录中的所有 mp3 音乐Music。
ls Music/*mp3 |xargs -d "\n" mplayer
Run Code Online (Sandbox Code Playgroud)
ls Music/*mp3可以列出目录中的所有mp3文件,Music通过带有xargs的管道发送,-d "\n"是处理文件名中的空白。
我想将 allstdout和重定向stderr到/dev/null,并在后台运行它。
ls Music/*mp3 |xargs -d "\n" mplayer > /dev/null 2>&1 &
Run Code Online (Sandbox Code Playgroud)
这工作正常,但我希望它在关闭终端后运行。
nohup ls Music/*mp3 | xargs -d "\n" mplayer > /dev/null 2>&1 &
ls Music/*mp3 | xargs -d "\n" nohup mplayer > /dev/null 2>&1 &
ls Music/*mp3 | nohup xargs -d "\n" mplayer > /dev/null 2>&1 &
Run Code Online (Sandbox Code Playgroud)
当我关闭终端时,后台运行的进程结束。
为什么nohup …
nohup ×10
bash ×5
linux ×3
.net-core ×1
alias ×1
background ×1
exec ×1
http ×1
javascript ×1
macos ×1
node.js ×1
php ×1
pid ×1
process ×1
ps ×1
python ×1
shell ×1
shell-exec ×1
shellexecute ×1
ssh ×1
supervisord ×1
unix ×1