我有一个需要很多时间才能完成的脚本.
我宁愿退出并稍后检索其输出,而不是等待它完成.
我试过了;
at -m -t 03030205 -f /path/to/./thescript.pl
nohup /path/to/./thescript.pl &
我还验证了这些进程实际存在ps
并at -l
依赖于我使用的调度语法.
当我退出shell时,这两个进程都会死掉.有没有办法在关闭连接时阻止脚本终止?
我们这里有crons并且它们已经设置好并且正常工作,但我想使用at
或nohup
用于一次性脚本.
我的语法有问题吗?有没有其他方法可以产生预期的结果?
screen
或disown
- 他们没有安装在我的HP Unix设置中,我也无法安装它们 我尝试在linux shell中进行字符串替换,
str=2011/10/10
echo "$str"
a=${str//\//\_}
echo $a
Run Code Online (Sandbox Code Playgroud)
它可以在我调用命令时执行:./ test.sh但是如果我在nohup模式下运行它,使用命令:nohup ./test.sh&
它说./test.sh:8:糟糕的替换
这有什么不对?
谢谢
在我的服务器上nohup sleep 1 > nohup.out &
没有提供帮助信息.好.
在我的笔记本电脑上运行相同的命令,我得到:nohup: ignoring input and redirecting stderr to stdout
.虽然命令仍然正常运行并完成,但我不明白为什么在我的两台机器之间报告此消息存在差异.幸运的是,我可以通过简单地将stderr和stdout重定向到文件来解决我的笔记本电脑上的这个问题:nohup sleep 1 &> nohup.out &
所以....我想要做的是在我的笔记本电脑上实现一个更有用的命令:
以下在我的服务器上工作正常,并且没有报告消息:
nohup ls -1 *.txt | sed -e "s%\(.*\)%/home/user/scripts/script.pl -find \1 %" | sh > nohup.out &
这行代码"nohups"将一个文件管道列表导入到sed中,它们script.pl
连续运行并在shell中执行.script.pl
将数据打印到多个文件,并将一些信息打印到stdout.我通过将其写入名为的文件来捕获此信息nohup.out
现在,当我在笔记本电脑上运行这个单行时,我明白了nohup: ignoring input and redirecting stderr to stdout
.这是预期的(但由于我不知道的原因).但是当我修改行重定向stderr和stdout时:
nohup ls -1 *.txt | sed -e "s%\(.*\)%/home/user/scripts/script.pl -find \1 %" | sh &> nohup.out &
我仍然得到消息 nohup: ignoring input and redirecting …
我有一个使用硒的网络刮板,我想在注销后在后台事件中在Ubuntu EC2上运行,所以我尝试使用nohup
。我当前的代码是:
webscrape.py:
from pyvirtualdisplay import Display
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait # available since 2.4.0
from selenium.webdriver.support import expected_conditions as EC
def main():
display = Display(visible=0, size=(800, 600))
display.start() #starts vitual display
driver = webdriver.Firefox()
...do the webscraping...
driver.close()
display.stop()
if __name__ == "__main__": main()
Run Code Online (Sandbox Code Playgroud)
当我登录EC2并python webscrape.py
正常运行时。但是,当我nohup python webscrape.py
注销时,它停止了。在nohup.out
日志中,出现以下错误:
Traceback (most recent call last):
File "/usr/local/lib/python2.7/dist-packages/Cruz/Scripts/WebScrape/google_brand_web_scraper.py", line 175, in …
Run Code Online (Sandbox Code Playgroud) 我们有脚本进行一些处理并使用nohup在后台触发作业.当我们从Oracle OEM安排此脚本(或者它可以是任何调度程序作业)时,我看到以下错误并显示状态为失败,但脚本实际上没有问题.使用nohup启动备份地面作业时如何正确退出脚本?
Remote operation finished but process did not close its stdout/stderr
Run Code Online (Sandbox Code Playgroud)
#!/bin/bash
# do some processing
...
nohup ./start.sh 2000 &
# end of the script
Run Code Online (Sandbox Code Playgroud) 我想在远程Ubuntu PC(AWS)上运行脚本.
while true; do timeout 1h python worker.py --log-level=ERROR; done
Run Code Online (Sandbox Code Playgroud)
效果很好,但是当我添加nohup
:
nohup while true; do timeout 1h python worker.py --log-level=ERROR; done &
Run Code Online (Sandbox Code Playgroud)
它返回错误-bash: syntax error near unexpected token 'do'
.
什么是正确的语法?
我有一个 python 脚本,我想在我的 unix 服务器的后台执行。问题是我需要 python 脚本等待上一步完成,然后才能进入下一个任务,但我希望我的工作在退出后继续运行。
我想我可以设置如下,但想确认:
脚本的摘录如下所示,其中命令 2 依赖于命令 1 的输出,因为它在同一目录中输出一个已编辑的可执行文件。我想指出的是,命令 1 和 2 没有包含 nohup/&。
subprocess.call('unix command 1 with options', shell=True)
subprocess.call('unix command 2 with options', shell=True)
Run Code Online (Sandbox Code Playgroud)
如果当我像这样启动我的 python 脚本时:
% nohup python python_script.py &
Run Code Online (Sandbox Code Playgroud)
我的脚本是否会在后台运行,因为我明确没有将 nohup/& 放在我的脚本 unix 命令中,而是在后台运行 python 脚本?
我正在尝试使用运行ruby脚本nohup
:
nohup ruby script.rb和
这需要几个小时才能运行,但是会通过记录其进度puts
。
通常,我可以查看nohup.out以查看使用nohup运行的任何内容的最新输出。但是,我的ruby脚本在完成或被杀死之前似乎不会输出任何内容。
我究竟做错了什么?
所以我有一个作业在我的 unix 终端上后台运行,我将不得不在一段时间后关闭 ssh 终端,并且我的作业也必须在那之后继续。我如何使用 nohup 或任何其他可能的选项来实现此目的。
我将这个问题放在stackoverflow上,因为我已经在这里找到了很多有关该主题的问题。
简短介绍
简单地说,nohup
可用于在后台运行应用程序,并在用户注销或关闭终端或ssh会话后保持其运行,例如
这里有很多关于stackoverflow的示例问题,例如this或that。
我的问题很简单。
为什么选择了nohup
,当有类似的选项upstart
,systemd
......其管理的应用作为服务于更方便的方式(运行级别,...)?
阅读有关相似主题的许多问题,唯一的选择似乎是nohup
。几乎从来没有答案是这样的:“ ...使用暴发户脚本,因此一切都由您完成...”
我主要使用eg upstart
,除了可能用于快速而肮脏的测试场景。
我缺少重要的东西吗?
我正在本地计算机上使用装有 CentOS 的远程服务器,
我希望它运行以下代码:
nohup python3 search_large_files.py &
Run Code Online (Sandbox Code Playgroud)
然而,它并没有像我预期的那样工作
[root@iz2ze9wve43n2nyuvmsfx5z ~]# ps ax| grep nohup
29360 pts/1 R+ 0:00 grep --color=auto nohup
Run Code Online (Sandbox Code Playgroud)
我如何利用 nohup 来运行我的 python 代码,以便我可以在服务器工作时关闭电源并进入睡眠状态。
这可能是一个毫无意义的问题,但由于我不知道要搜索什么以及如何搜索,所以我决定向公众提出这个问题。如果您认为这个问题需要改进或需要更多信息,请发表评论。我会尽力尽快回复并编辑。
我有一个简单的 Go 程序,它使用名为Zerolog 的三十方日志库并打印日志。
package main
import (
"os"
"time"
"github.com/rs/zerolog"
"github.com/rs/zerolog/log"
)
func init() {
zerolog.SetGlobalLevel(zerolog.DebugLevel)
zerolog.TimeFieldFormat = zerolog.TimeFormatUnixMs
log.Logger = log.Output(zerolog.ConsoleWriter{Out: os.Stderr, TimeFormat: time.RFC3339Nano})
}
func main() {
log.Debug().Msg("This if debugging message")
log.Info().Msg("This is information message")
}
Run Code Online (Sandbox Code Playgroud)
如果您只是使用 运行该程序$ go run main.go
,它会打印出以下结果。
2021-06-23T12:45:29.409Z DBG This if debugging message
2021-06-23T12:45:29.41Z INF This is information message
Run Code Online (Sandbox Code Playgroud)
但是,如果我用来nohup
运行这个程序$ nohup go run main.go &
,那么它会创建一个名为 的输出文件nohup.out
并写入不同的日志格式。这是为什么?
[90m2021-06-23T12:59:37.755Z[0m [33mDBG[0m This if debugging message
[90m2021-06-23T12:59:37.756Z[0m …
Run Code Online (Sandbox Code Playgroud) nohup ×12
bash ×4
linux ×4
python ×3
unix ×3
shell ×2
ubuntu ×2
amazon-ec2 ×1
at-job ×1
format ×1
go ×1
keep-alive ×1
logfile ×1
pipe ×1
ruby ×1
scheduling ×1
sed ×1
subprocess ×1
systemd ×1
upstart ×1
web-scraping ×1
xvfb ×1