我编写了一个Python脚本,用于检查某个电子邮件地址并将新电子邮件传递给外部程序.如何让这个脚本全天候执行,例如将其转换为Linux中的守护程序或服务.我是否还需要一个永远不会在程序中结束的循环,或者可以通过多次执行代码来完成它?
我有一个脚本,每次运行我的PHP脚本X次:
#!/bin/bash
while true; do
/usr/bin/php -f ./my-script.php
echo "Waiting..."
sleep 3
done
Run Code Online (Sandbox Code Playgroud)
如何将其作为守护进程启动?
我正在使用mod_wsgi通过Apache为django站点提供服务.我还有一些Python代码作为后台进程运行(dameon?).它不断轮询服务器并将数据插入其中一个Django模型.这工作正常,但我可以将此代码作为我的Django应用程序的一部分,但能够在后台持续运行吗?它不需要是一个过程本身,而是一个不断活跃的Django网站的艺术.如果是这样,你能指点我一个例子或一些文件来帮助我实现这个目标吗?
谢谢.
我正在尝试编写一个脚本来运行我的一个.jar文件作为守护进程,但我不知道如何.sh在Ubuntu中创建扩展文件.我已经习惯使用vi我想要的代码创建一个文件,但我无法弄清楚如何将文件定义为特定的.sh文件.例如,我想将我的文件" foo"或" foo.txt"转换为" foo.sh".
是否有一个简单的命令,我没有看到可以将文件转换为.sh扩展名,还是一个更复杂的过程?
我在Python中有一些[对我的RPi]的任务涉及很多sleep事情:做一些需要一两秒钟或三秒钟的事情,然后等待几分钟或几小时.我希望在睡眠时间内将控制权传递给操作系统(Linux).为此,我应该躲避那些任务.一种方法是使用Python的标准守护程序进程库.
但守护进程并不那么容易理解.根据PEP 3143的基本原理段落,表现良好的守护进程应该执行以下操作.
对于像我这样的Linux/Unix新手,其中一些不是解释.但我想知道为什么我做我做的事.那么这个理由背后的理由是什么?
在Mac OS X Lion上使用Ruby v1.8.7和Daemons v1.1.8,我试图编写一个消费者进程并让它作为dameon运行:
# config[:name] => 'idx_my_delete_consumer'
# config[:daemon] => {:multiple => false,
# :backtrace => true,
# :dir_mode => :normal,
# :log_dir => '/Users/pprakash/consumer.log',
# :monitor => true,
# :dir => '/Users/pprakash/pids'}
Daemons.run_proc(config[:name], config[:daemon]) do
consumer = MyConsumer.new(config)
consumer.subscribe
end
但是,它没有启动,而是抛出一个很长的回溯,这是这样的:
E, [2012-05-28T19:34:16.199770 #29357] ERROR -- : Bad file descriptor (Errno::EBADF) /opt/local/lib/ruby/gems/1.8/gems/daemons-1.1.8/lib/daemons/daemonize.rb:134:in `for_fd' /opt/local/lib/ruby/gems/1.8/gems/daemons-1.1.8/lib/daemons/daemonize.rb:134:in `close_io' /opt/local/lib/ruby/gems/1.8/gems/daemons-1.1.8/lib/daemons/daemonize.rb:134:in `initialize' /opt/local/lib/ruby/gems/1.8/gems/daemons-1.1.8/lib/daemons/daemonize.rb:134:in `new' /opt/local/lib/ruby/gems/1.8/gems/daemons-1.1.8/lib/daemons/daemonize.rb:134:in `close_io' /opt/local/lib/ruby/gems/1.8/gems/daemons-1.1.8/lib/daemons/daemonize.rb:75:in `call_as_daemon' /opt/local/lib/ruby/gems/1.8/gems/daemons-1.1.8/lib/daemons/application.rb:258:in `start_proc' /opt/local/lib/ruby/gems/1.8/gems/daemons-1.1.8/lib/daemons/application.rb:295:in `start' /opt/local/lib/ruby/gems/1.8/gems/daemons-1.1.8/lib/daemons/monitor.rb:51:in `watch' /opt/local/lib/ruby/gems/1.8/gems/daemons-1.1.8/lib/daemons/monitor.rb:51:in `fork' /opt/local/lib/ruby/gems/1.8/gems/daemons-1.1.8/lib/daemons/monitor.rb:51:in `watch' /opt/local/lib/ruby/gems/1.8/gems/daemons-1.1.8/lib/daemons/monitor.rb:45:in `each' /opt/local/lib/ruby/gems/1.8/gems/daemons-1.1.8/lib/daemons/monitor.rb:45:in …
我正在使用ruby 1.9.2p180(2011-02-18修订版30909)
为了进行日志记录,我使用了日志记录宝石.我的程序有两个块,用作守护进程.
但是从这些块进行日志记录会导致错误,并且没有任何内容写入日志文件:
log shifting failed. closed stream
log writing failed. closed stream
Run Code Online (Sandbox Code Playgroud)
以下是代码中发生的情况:
log = Logger.new(logbase + 'logfile.log', 'monthly')
log.level = Logger::INFO
proc = Daemons.call(options) do
# [...]
log.info "Any Logmessage"
# [...]
end
Run Code Online (Sandbox Code Playgroud)
任何想法,哪里错了?
因此,Ruby的守护进程gem允许您monitor=true在启动进程时进行设置.什么是监视器,你用它做什么?你所做的只是指定true或false...是在某处创建一个日志文件?实际监控过程的东西,比如god?为什么关于这件东西如此可怕的文件呢?
或者这实际上是每个人都应该知道的Unix事情?:)
当我将日志记录参数设置为Daemons(1.1.0)gem时,我将如何实现与此行相似的行为?
logger = Logger.new('foo.log', 10, 1024000)
Run Code Online (Sandbox Code Playgroud)
守护进程选项:
options = {
:ARGV => ['start'],
:dir_mode => :normal,
:dir => log_dir,
:multiple => false,
:ontop => false
:mode => :exec,
:backtrace => true,
:log_output => true
}
Run Code Online (Sandbox Code Playgroud) 在Python中连接两个守护进程的最佳方法是什么?
我有守护进程A和B.我想在A的模块中接收B生成的数据(可能是双向的).两个守护进程都支持插件,所以我想关闭插件中的通信.什么是最好的跨平台方式?
我知道很少有来自低级解决方案的机制 - 共享内存(C/C++),linux管道,套接字(TCP/UDP)等,以及很少的高级别队列(JMS,Rabbit),RPC.
两个守护进程应该在同一主机上运行,但显然更好的方法是从连接类型中抽象.
python中的典型解决方案/库是什么?我正在寻找一个优雅轻便的解决方案.我不需要外部服务器,只需要两个进程相互通信.
我应该在python中使用什么来做到这一点?