使用 nohup 执行命令非常困惑?
我的脚本: #!/bin/bash . /home/was/.bash_profile export PATH=/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:/home/was/bin:/wasdata/oracle/10.2.0/client_1/bin: sqlplus "mon_system/monsystem@10.10.4.90"
40 2024-04-22
编程技术问答社区
nohup VERBOSE=1 perl script.pl
我有一个perl脚本,可以将ENV变量设置为指导特定输出 例如$ debug,$详细,$开发等 通常我从命令行 运行这些 $ VERBOSE=1 perl myperlscript.pl params 我现在想使用NOHUP运行它们.使用命令行 $ nohup VERBOSE=1 perl myperlscript.pl params 显然是不正确的,因为试图设置env {verbose}被解释为nohup的参数,我得到了msg nohup:无法运行命令'verbose = 1':没有这样的文件或目录 这里的正确语法是什么?我正在尝试在Linux盒子上运行此操作. 解决方案 在调用nohup之前设置环境变量,当 exec()s(用)perl perl. 时将保留它. $ VERBOSE=1 nohup perl myscript.pl params ... 其他解决方案 这正是env命令的目的: $ env VAR1=VAL1
32 2024-04-22
编程技术问答社区
如何使用 ssh 在后台运行命令并分离会话
我目前正在尝试将SSH进入远程计算机并运行脚本,然后将节点放在脚本运行的情况下.以下是我的脚本.但是,当它运行时,该脚本将在计算机上成功运行,但SSH会话挂起.有什么问题? ssh -x $username@$node 'rm -rf statuslist mkdir statuslist chmod u+x ~/monitor/concat.sh chmod u+x ~/monitor/script.sh nohup ./monitor/concat.sh & exit;' 解决方案 您想在远程计算机/服务器上执行/启动某些脚本(将自动终止)并与服务器断开连接时. eg:在执行 时运行的脚本 采用模型并将其复制到远程服务器
22 2024-04-22
编程技术问答社区
可以在远程 ssh 命令中使用变量吗?
我想在远程计算机上按顺序执行多个命令,而以后的一些命令取决于早期的命令.在最简单的示例中,我得到了: ssh my_server "echo this is my_server; abc=2;" this is my_server abc=2: Command not found. ssh my_server "echo this is my_server; abc=2; echo abc is $abc" abc: undefined variable 对于一些背景信息,我实际上想做的就是拼凑一条路径并启动Java应用程序: ssh my_server 'nohup sh -c "( ( echo this is my_server; jabref_exe=`which jabref`; jabref_dir=`dirname $jabref_exe`; java -jar $jabref_dir/../jabref.jar` $1 &/dev/null ) & )"'
36 2024-04-22
编程技术问答社区
Bash脚本可以在断开连接后继续使用,但不能使用户中断。
我想编写一个bash脚本,如果用户断开了连接,将继续运行,但是如果用户按CTRL+C. ,可以中止 我可以这样解决第一部分: #!/bin/bash cmd=' #commands here, avoiding single quotes... ' nohup bash -c "$cmd" & tail -f nohup.out ,但是按CTRL+C显然只是杀死tail过程,而不是主体.我可以两个吗?也许使用屏幕? 解决方案 我想编写一个bash脚本,如果用户断开用户,该脚本将继续运行,但是如果用户按Ctrl+c. 我认为这正是您提出的问题的答案,该问题没有屏幕: #!/bin/bash cmd=`cat
10 2024-03-29
编程技术问答社区
脚本中的nohup不能正确退出
我们有脚本可以进行一些处理,并使用NOHUP在背景中触发工作.当我们从Oracle OEM安排此脚本(或可以是任何调度程序作业)时,我会看到以下错误并显示为失败的状态,但脚本实际上没有问题完成. NOHUP启动备份地面作业时如何正确退出脚本? Remote operation finished but process did not close its stdout/stderr 文件:test.sh #!/bin/bash # do some processing ... nohup ./start.sh 2000 & # end of the script 解决方案 通过以这种方式执行start.sh,您可以要求其主张test.sh的输出文件描述符的部分所有权(stdout/stderr).因此,当大多数 bash脚本退出时,他们的文件描述符已关闭(通过操作系统),而test.sh的文件描述符无法关闭,因为start.sh仍然对他们有索赔. 解决方案是不
12 2024-03-28
编程技术问答社区
将nohup的输出错误发送到syslog。
我正在尝试编写一个使用NOHUP并将错误传递给rsyslog的bash脚本. 我已经尝试了该命令具有不同变化的命令(请参见下文),但无法将输出传递给STD TXT文件以外的任何内容.我不能把它放在管道上. nohup imageprocessor.sh > "$LOG" & 是可以输出NOHUP输出还是需要其他命令. 我尝试过的几种日志变体 LOG="|/usr/bin/logger -t workspaceworker -p LOCAL5.info &2" 或 LOG="|logtosyslog.sh" 或 LOG="logtosyslog.sh" 解决方案 bash中的一种方式将输出重定向到系统列为: exec > >(logger -t myscript) stdout然后发送到logger命令 exec 2> >(logger -t myscript) 对于stderr 其他解决方案 不是直接. N
16 2024-03-28
编程技术问答社区
告诉nohup实时写入输出信息
使用nohup脚本的输出被缓冲,并且在脚本完成执行后,仅将其倒入日志文件(nohup.out).看到脚本在接近实时的事物中,知道它的进展非常有用. 是否有一种方法可以使nohup在脚本产生时写入输出?或者,由于这种频繁的文件访问操作很慢,可以在执行过程中定期转移输出? 解决方案 有一个特殊的程序:Unbuffer!参见 http://linux.die.net/man/1/man/1/unbuffer > 这个想法是,您的程序的输出例程识别出Stdout不是终端(isatty(stdout) == false),因此它们的缓冲区输出达到最大尺寸.将unbuffer程序用作程序包装器将"欺骗"一次以一次写入一行,就像您直接在交互式终端中运行程序一样. 其他解决方案 您要执行什么命令?您可以创建一个.bash文件,该文件将在每个命令之后将输出重定向到文件(echo" blabh" >> your-output.txt),因此您可以在NOHUP执行期间检查该文件(您应该运行:
20 2024-03-28
编程技术问答社区
如何用bash写一个看门狗守护程序?
我想要一种在shell脚本中编写守护程序的方法,该守护程序会在循环中运行另一个应用程序,如果它死亡,请重新启动. 在使用SSH会话中使用./myscript.sh运行时,它将启动守护程序的新实例,除非守护程序已经在运行. 当SSH会话结束时,守护程序将持续. 应有一个杀死任何现有守护程序的参数(./myscript -stop). ( 编辑的注释 - 指定nohup和类似工具的原始问题.这个人为的要求是" xy问题",而实际上,公认的答案使用了OP声称无法使用的所有工具.) 解决方案 基于评论中的澄清,您实际想要的是一个守护程序过程,可以使孩子保持运行,每次退出时都会重新启动.您需要一种在SSH会话中键入" ./myscript.sh"的方法,并开始守护程序. #!/usr/bin/env bash PIDFILE=~/.mydaemon.pid if [ x"$1" = x-daemon ]; then if test -f "$PIDFILE"; t
12 2024-03-28
编程技术问答社区
通过包含nohup的ssh启动远程脚本
我想通过这样的ssh远程启动脚本: ssh user@remote.org -t 'cd my/dir && ./myscript data my@email.com' 脚本做的各种事情都可以正常工作,直到与NOHUP达成一行: nohup time ./myprog $1 >my.log && mutt -a ${1%.*}/`basename $1` -a ${1%.*}/`basename ${1%.*}`.plt $2 &1 & 应该确实启动程序myprog,将其输出输送到mylog,然后发送一封电子邮件,其中一些由MyProg创建的数据文件作为附件和日志作为正文.虽然当脚本到达这一行时,SSH输出: 连接到远程.org关闭. 这里有什么问题? 感谢您的任何帮助 解决方案 您的命令在后台运行流程管线,因此调用脚本将立即退出(或之后很快).这将导致SSH关闭连接.这反过 您的time ./myprog过程受A n
18 2024-03-28
编程技术问答社区
Nohup: 无法从控制台分离出来
我有一个将在Linux和Mac OS X中运行的BASH脚本. nohup > output.txt 2> error.txt 之前很久就退出了,这就是为什么(就我的知识而言)我需要使用nohup.但是,我已经进行了一些测试,并从bash脚本中的行中删除nohup似乎很有困难,因为两个系统上的实用程序都将启动,并且即使在脚本退出后仍继续运行. . 解决方案 尝试以下方法: nohup > output.txt 2> error.txt >/dev/null
28 2024-03-28
编程技术问答社区
通过ssh获取一个用nohup启动的进程的PID
我想通过SSH在远程计算机上使用NOHUP启动一个过程.问题是如何从NOHUP开始获取该过程的PID,因此"实际上是在做某事",而不是某些外壳实例之类的.另外,我想将Stdout和stderr存储在文件中,但这不是这里的问题... 本地,它可以完美地使用 nohup sleep 30 > out 2> err
30 2024-03-28
编程技术问答社区
使用nohup的别名
为什么不工作? $ 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 (我问这个问题的原因是因为我将我的perl和python求和到不同的perl/python二进制文件,这些二进制文件是为了我自己的目的而优化的;但是,如果我不提供,否会给我带来麻烦通往我的perl/python二进制文件的完整路径) 解决方案 因为外壳不会将别名传递给子进程(除非您使用$()或````). $别名sayhello ='/bin/echo"你好世界!"' 现在,在此外壳过程中已知一个别名,这很好,但仅在一个外壳过程中起作用. $
10 2024-03-28
编程技术问答社区
sudo nohup nice <- 按什么顺序?
所以我有一个我想作为root运行的脚本,而无需挂起并且很好.我应该将命令放入什么顺序? 中 sudo nohup nice foo.bash& 或 nohup nice sudo foo.bash& 等. 我怀疑这没关系,但是想从真正知道的人那里得到一些见解. 解决方案 如果需要负性,我会做: sudo nohup nice命令 因为根据" Info Coreutils",NOHUP应该 precephot 不错.如果我想要一个负值的值,那么sudo必须以前来,因为只有root才能使用负良好值. 如果需要积极的善良,我会简单地做: nohup nice sudo命令 这样可以确保不使用根特权运行Nohup和Nice. 其他解决方案 sudo可能不尊重.至少,它不在我的机器上(Ubuntu 9.04).运行此: nice sudo nice sudo nice nice 打印出0和10.(请注意,没有命令的" nice"打印出当前
10 2024-03-28
编程技术问答社区
使用命令&+disown而不是nohup
我今天尝试使用nohup命令执行rsync命令,以便将某些文件的副本从VM处理到另一个文件,即使我关闭了控制台. 然后我说为什么不使用rsync [parameters] & + disown %1 两者有什么区别? 解决方案 disown是更好的做法(内置在外壳中,而不是根据外部工具),但是它需要更多的工作:您需要自己重定向stdin,stdout和stderr(而nohup nohup如果您没有自己完成,将使用nohup.out nohup.out的名称进行重定向. ). 因此: rsync "${args[@]}" logfile 2>&1 & disown -h "$!" 作为样式说明,如果您对PID的唯一使用是将其传递给disown,则i do 建议将disown与调用相同,如上所述:这可以确保$!引用是在启动rsync之后添加更多代码,可能构成其他背景过程的更多代码,即将添加更多代码,即使将来更改添加了更多代码.
14 2024-03-28
编程技术问答社区
如何以不同的用户身份运行nohup而不产生两个进程?
我正在尝试索取命令并以其他用户的方式运行它,但是每次我进行这两个过程都会产生. 例如: $ nohup su -s /bin/bash nobody -c "my_command" > outfile.txt & 这肯定会运行my_command,但我不想出现一个额外的过程: $ ps -Af . . . root ... su -s /bin/bash nobody my_command nobody ... my_command ,如果我杀死了根部过程,那么没有人的过程仍然存在...但是有没有办法根本不运行根过程?由于获得my_command并杀死它的ID更为复杂. 解决方案 这可以作为: 实现 su nobody -c "nohup my_command >/dev/null 2>&1 &" 并将" my_command"的pid写入pidfile: pidFile=/var/run/myAppName.pid touch $pidF
14 2024-03-28
编程技术问答社区
如何将nohup输出重定向到一个指定的文件?
我从我发现的其他示例中尝试的一切,因此似乎不起作用.我正在尝试使用NOHUP运行我的应用程序,但将应用程序的输出附加到文件. 我尝试了以下一些.似乎没有用. nohup dotnet application.dll &> out.log & nohup dotnet application.dll > out.log 2>&1 & nohup dotnet application.dll > /opt/out.log & 我总是收到 之类的东西 -bash: out.log: Permission denied 我尝试使用sudo运行该应用程序,但似乎仍然不起作用. nohup dotnet application.dll & 工作正常,但是将输出引导到其他一些目录,例如/home/ubuntu/nohup.out 我在做什么错? 解决方案 nohup dotnet application.dll > out.log 2>&1 &是正确的形
16 2024-03-28
编程技术问答社区
关闭终端后在后台运行进程
即使关闭终端后,我也试图在后台运行脚本.我已经搜索,搜索并尝试了nohup和disown,但似乎都没有起作用.关闭终端窗口时,我会收到典型的Closing this window will terminate the running processes: watch.消息.即使使用nohup或disown,这最终终止了我的背景过程.有什么问题? 我的代码是一条简单的两行 cmd="nohup watch -n 1 sudo /etc/block.sh > /dev/null" $cmd & # blocks automatically 它位于.bash_profile中,因为我希望每当我打开一个新终端时启动它. 您可以忽略Sudo;我已经找到了在不输入密码的情况下执行sudo命令的方法. 我正在使用mac osx. 解决方案 启动子壳并运行nohup命令从那里避免在退出时将终端杀死. bash -c "nohup sh -c 'while t
16 2024-03-28
编程技术问答社区
bash如何处理注销时的工作?
据我从书籍和狂欢手册中了解的那样.当用户从bash登录时,如果他不使用NOHUP或拒绝,用户启动的所有背景作业将自动终止.但是今天我测试了它: 登录到我的GNOME桌面并访问了GNOME末端. 终端中有两个选项卡,在一个标签中,我创建了一个名为test的新用户,并登录为test su - test 开始脚本. cat test.sh #!/bin/bash sleep 60 printf "hello world!!" exit 0 ./test.sh & 之后,我登录了测试并关闭了选项卡 在下一个选项卡中,我将PS Aux作为根,发现作业仍在运行. 这是怎么发生的? 解决方案 是否在出口上终止运行背景作业取决于外壳. BASH通常不执行此操作,但可以配置为登录外壳(shopt -s huponexit).无论如何,在控制过程(例如登录外壳)终止后,无法访问TTY. 确实会导致SIGHUP的情况包括: 当TTY关闭时,前
18 2024-03-28
编程技术问答社区