我从init.d脚本启动了python守护程序。守护进程可选择通过REST接口从服务器读取id:s数组。否则我使用一个预定义的id:s。
数组logger.info("BehovsBoBoxen control system: bbb_domoticz.py starting up")
if DOMOTICZ_IN or DOMOTICZ_OUT:
#
# build authenticate string to access Domoticz server
#
p = urllib2.HTTPPasswordMgrWithDefaultRealm()
p.add_password(None, DOMOTICZ_URL, USERNAME, PASSWORD)
handler = urllib2.HTTPBasicAuthHandler(p)
opener = urllib2.build_opener(handler)
urllib2.install_opener(opener)
if DOMOTICZ_IN:
#
# Find all temperature sensors in Domoticz and populate sensors array
#
url= "http://"+DOMOTICZ_URL+"/json.htm?type=devices&filter=temp&used=true&order=Name"
logger.debug('Reading from %s',url)
response=urllib2.urlopen(url)
data=json.loads(response.read())
logger.debug('Response is %s',json.dumps(data, indent=4, sort_keys=True))
for i in range(len(data["result"])):
a=data["result"][i]["Description"]
ini=a.find('%room')
if ini != -1:
ini=ini+6
rIndex=int(a[ini:])
logger.info('Configure room id %s with Domoticz sensor idx: %s', rIndex, data["result"][i]["idx"])
sensors[rIndex]=data["result"][i]["idx"]
守护程序在启动时从init.d脚本启动。如果我使用预定义id:s的选项,即我不使用REST接口,一切都很完美。守护进程在启动时启动,我可以使用命令
停止并重新启动守护进程sudo service start / stop / restart
但是,如果我使用其他选项(从服务器读取id:s),则守护程序不会在启动时启动。在日志文件中,我找到一行(“... bbb_domoticz.py启动”)。 Henze,守护进程在此之后默默地退出,可能是在以下urllib2调用之一中。以下logger.debug('Reading ...')未显示在日志文件中。
但奇怪的是,如果我在主目录中使用init.d脚本的副本手动启动守护程序,守护程序就会启动。如果我从/etc/init.d运行init.d脚本,那么deamon会立即退出,就像它在启动时一样。但是如果使用我的主目录中的脚本启动守护进程,我可以继续使用service命令启动/停止/重启。
因此,除非我已经设法从我的主目录启动守护程序,否则我从中取出urllib2会出错。令我困惑的是,当守护进程退出时,我没有得到任何追溯或任何东西。
知道如何解决这个问题吗?
编辑:受到将记录添加到特定模块的答案的启发,我尝试将记录添加到urllib2。但是,我无法弄清楚如何让这个模块使用我的日志记录处理程序。对此有所帮助表示赞赏。