标签: background-process

如何在后台启动和运行外部脚本?

我尝试了这两种方法:

os.system("python test.py")

subprocess.Popen("python test.py", shell=True)
Run Code Online (Sandbox Code Playgroud)

两种方法都需要等到test.py完成才能阻止主进程.我知道"nohup"可以胜任这项工作.是否有Python方法来启动test.py或任何其他shell脚本并让它在后台运行?

假设test.py是这样的:

for i in range(0, 1000000):
    print i
Run Code Online (Sandbox Code Playgroud)

os.system()或subprocess.Popen()都将阻止主程序,直到显示1000000行输出.我想要的是让test.py以静默方式运行并仅显示主程序输出.当test.py仍在运行时,主程序可能会安静.

python external-process background-process

11
推荐指数
1
解决办法
5万
查看次数

Python中的异步后台进程?

我一直在使用它作为参考,但无法完全满足我的需求:在Python中调用外部命令

我也在读这篇文章:http://www.python.org/dev/peps/pep-3145/

对于我们的项目,在部署应用程序之前,我们需要更新5个svn签出.在我的开发环境中,快速部署对于生产力而言比生产部署更重要,我一直在努力加快这一过程.

我有一个bash脚本,一直运作得体,但有一些限制.我使用以下bash命令启动多个'svn updates':

(svn update /repo1) & (svn update /repo2) & (svn update /repo3) &
Run Code Online (Sandbox Code Playgroud)

这些都是并行运行的,效果很好.我还在构建脚本的其余部分中使用此模式来触发每个ant构建,然后将战争移动到Tomcat.

但是,如果其中一个更新或构建失败,我无法控制停止部署.

我正在用Python重写我的bash脚本,所以我可以更好地控制分支和部署过程.

我正在使用subprocess.call()来触发'svn update/repo'命令,但每个命令都按顺序执行.我尝试'(svn update/repo)&'然后全部触发,但结果代码立即返回.因此,在异步模式下,我无法确定特定命令是否失败.

import subprocess

subprocess.call( 'svn update /repo1', shell=True )
subprocess.call( 'svn update /repo2', shell=True )
subprocess.call( 'svn update /repo3', shell=True )
Run Code Online (Sandbox Code Playgroud)

我很想找到一种方法让Python启动每个Unix命令,并且如果任何调用在任何时候整个脚本停止都失败了.

python asynchronous background-process

11
推荐指数
1
解决办法
1万
查看次数

启动或确保在应用程序/服务器重新启动时运行延迟作业

我们必须使用delayed_job(或其他一些后台作业处理器)在后台运行作业,但我们不允许更改服务器上的启动脚本/启动级别.这意味着如果提供程序重新启动服务器,则不保证守护程序仍然可用(因为守护程序将由每个部署仅运行一次的capistrano配方启动).

目前,我能够想到确保delayed_job守护程序始终运行的最佳方法是向我们的Rails应用程序添加初始化程序,以检查守护程序是否正在运行.如果它没有运行,那么初始化器启动守护进程,否则,它就会离开它.

因此,问题是我们如何检测到Delayed_Job守护程序是从脚本内部运行的?(我们应该能够相当容易地启动一个守护进程,我不知道如何检测一个守护进程是否已经激活).

有人有主意吗?

此致,伯尼

基于下面的答案,这就是我提出的.只需将它放在config/initializers中就可以了:

#config/initializers/delayed_job.rb

DELAYED_JOB_PID_PATH = "#{Rails.root}/tmp/pids/delayed_job.pid"

def start_delayed_job
  Thread.new do 
    `ruby script/delayed_job start`
  end
end

def process_is_dead?
  begin
    pid = File.read(DELAYED_JOB_PID_PATH).strip
    Process.kill(0, pid.to_i)
    false
  rescue
    true
  end
end

if !File.exist?(DELAYED_JOB_PID_PATH) && process_is_dead?
  start_delayed_job
end
Run Code Online (Sandbox Code Playgroud)

ruby ruby-on-rails background-process ruby-on-rails-plugins delayed-job

11
推荐指数
2
解决办法
8244
查看次数

在Windows上用Ruby生成后台进程?

我基本上问的问题与Spawn中的后台进程相同,除了我需要在Windows环境中生成后台进程!不幸的是,我的研究表明Windows不支持Ruby分支(只有勺子.Rimshot!).

ruby windows fork background-process

11
推荐指数
2
解决办法
7848
查看次数

在capistrano任务中启动后台进程

capistrano任务

namespace :service do
  desc "start daemontools (svscan/supervise/svscanboot)"
  task :start, :roles => :app do
    sudo "svscanboot&"
  end
end
Run Code Online (Sandbox Code Playgroud)

现在这不起作用:svscanboot进程根本不运行.这帮助我找到sleep:https://github.com/defunkt/resque/issues/284 其他来源向我指出nohup,redirectionpty => true,所以我尝试了所有这些.

run "nohup svscanboot >/tmp/svscanboot.log 2>&1 &"   # NO
run "(svscanboot&) && sleep 1"                       # NO
run "(nohup svscanboot&) && sleep 1"                 # YES!
Run Code Online (Sandbox Code Playgroud)

现在,任何人都可以向我解释为什么我需要睡眠声明和nohup有什么区别?对于记录,如果从用户shell运行,上述所有内容同样运行良好,问题仅出现在capistrano的上下文中.

谢谢

linux shell capistrano ruby-on-rails background-process

11
推荐指数
1
解决办法
2656
查看次数

背景催生了Expect的过程

我正在使用expect在我的服务器上启动一个应用程序:

#!/usr/bin/expect

set timeout -1

spawn "bin/start-all.sh"
expect {
    -re "Found MongoDB in" { send "y\r"; exp_continue }
    -re "Found Hadoop in" { send "y\r"; exp_continue }
    -re "Going to start Hadoop" { interact }
}
Run Code Online (Sandbox Code Playgroud)

我可以在脚本运行的几秒钟内访问我的服务器上的应用程序,但是一旦它结束,应用程序就会变得不可用.

我在调试模式下运行expect并在结束时获得以下输出:

expect: does "vendors area. Do you want to start it? [y/n] y\r\n" (spawn_id exp6) match regular expression "Found MongoDB in"? Gate "Found MongoDB in"? gate=no
"Found Hadoop in "? Gate "Found Hadoop in "? gate=no
"Going to start Hadoop"? Gate "Going to …
Run Code Online (Sandbox Code Playgroud)

unix shell tcl expect background-process

11
推荐指数
1
解决办法
6843
查看次数

杀死应用后,后台获取功能无效

我正在尝试通过后台获取从url获取数据.我的func尝试获取数据,如果有新数据,它会发送本地通知.当我最小化应用程序时,后台提取工作大约10 - 20分钟后工作.但是,当我杀了应用程序(双击主页按钮并关闭应用程序)它不起作用.我等了大约1个小时但是没用.我在android中使用后台服务,它正在成功运行.有没有办法从网址获取数据并在应用关闭时发送本地通知?我正在使用Xcode 6和swift 1.2

background-process ios swift background-fetch

11
推荐指数
1
解决办法
9809
查看次数

如何让supervisord重启鸿工?

我有一些由supervisord管理的Python工作者,如果他们正常工作,应该连续打印到stdout(在每个完成的任务之后).但是,他们往往会挂起,我们很难找到错误.理想情况下,supervisord会注意到它们没有在X分钟内打印并重新启动它们; 任务是幂等的,所以不优雅的重启很好.是否有任何supervisord功能或插件可以做到这一点?或者是另一个类似管理员的程序,开箱即用?

我们已经在使用http://superlance.readthedocs.io/en/latest/memmon.html来杀死内存使用量突然增加,这可以缓解一些挂起,但是一个不会导致内存泄漏的挂起仍然会导致工人达到停顿状态.

worker background-process supervisord

11
推荐指数
1
解决办法
842
查看次数

如何在iphone的后台运行我的应用程序?

即使app没有运行,我也想在后台运行我的计时器.因为我希望在一段时间间隔后得到用户的gps坐标.这样做的方法是什么?

iphone objective-c background-process

10
推荐指数
2
解决办法
2万
查看次数

如何将参数传递给排队后台任务(.NET Core)

在我的网络应用程序中,我对长时间运行的任务执行操作,并且我想在后台调用此任务。因此,根据文档 .NET Core 3.1排队后台任务,我使用这样的代码:

public interface IBackgroundTaskQueue
{
    ValueTask QueueBackgroundWorkItemAsync(Func<CancellationToken, ValueTask> workItem);

    ValueTask<Func<CancellationToken, ValueTask>> DequeueAsync(CancellationToken cancellationToken);
}

public class BackgroundTaskQueue : IBackgroundTaskQueue
{
    private readonly Channel<Func<CancellationToken, ValueTask>> _queue;

    public BackgroundTaskQueue(int capacity)
    {
        var options = new BoundedChannelOptions(capacity){FullMode = BoundedChannelFullMode.Wait};
        _queue = Channel.CreateBounded<Func<CancellationToken, ValueTask>>(options);
    }

    public async ValueTask QueueBackgroundWorkItemAsync(Func<CancellationToken, ValueTask> workItem)
    {
        if (workItem == null)throw new ArgumentNullException(nameof(workItem));
        await _queue.Writer.WriteAsync(workItem);
    }

    public async ValueTask<Func<CancellationToken, ValueTask>> DequeueAsync(CancellationToken cancellationToken)
    {
        var workItem = await _queue.Reader.ReadAsync(cancellationToken);
        return workItem;
    }
}
Run Code Online (Sandbox Code Playgroud)

和托管服务

public …
Run Code Online (Sandbox Code Playgroud)

.net self-hosting background-process .net-core

10
推荐指数
1
解决办法
4168
查看次数