2015-10-06 58 views
0

我正试图在coreos上配置一个看门狗。 服务是这样的。为什么看门狗不踢?

[Unit] 
Description=Watchdog example service 

[Service] 
Type=notify 
Environment=NOTIFY_SOCKET=/run/%p.sock 
Environment=WATCHDOG_USEC=1000000 
ExecStartPre=-/usr/bin/docker kill %p 
ExecStartPre=-/usr/bin/docker rm %p 
ExecStart=/usr/libexec/sdnotify-proxy /run/%p.sock /usr/bin/docker run \ 
    --env=NOTIFY_SOCKET=/run/%p.sock \ 
    -v /run:/run \ 
    --name %p pranav93/test_watchdogged python hello.py 
ExecStop=/usr/bin/docker stop %p 

WatchdogSec=1 

[Install] 
WantedBy=multi-user.target 

蟒蛇文件hello.py是一样的东西,

print 'Hello, in hello.py' 
print 'ready sending' 
x = sd_notifyd({'READY':1}) 
print str(x) 
print 'watchdog sending' 
x = sd_notifyd({'WATCHDOG':1}) 
print str(x) 
print os.environ.get('WATCHDOG_USEC', None) 
print 'lol, wait now for sometime' 
import time 
for i in range(3): 
    print i 
    time.sleep(1) 
print 'finished' 

虽然我不发送WATCHDOG=1坪至sysd,它仍然不是它停止,服务没有动它“失败”的状态。它背后的原因是什么? 原木是

Oct 06 09:33:19 core-01 systemd[1]: Starting Watchdog example service... 
Oct 06 09:33:19 core-01 docker[2779]: watchdogged 
Oct 06 09:33:19 core-01 docker[2790]: watchdogged 
Oct 06 09:33:19 core-01 sdnotify-proxy[2800]: True 
Oct 06 09:33:22 core-01 sdnotify-proxy[2800]: ready sending 
Oct 06 09:33:22 core-01 sdnotify-proxy[2800]: <socket._socketobject object at 0x7fa3cc3c2440> 
Oct 06 09:33:22 core-01 sdnotify-proxy[2800]: 1 
Oct 06 09:33:22 core-01 sdnotify-proxy[2800]: watchdog sending 
Oct 06 09:33:22 core-01 sdnotify-proxy[2800]: <socket._socketobject object at 0x7fa3cc3c2440> 
Oct 06 09:33:22 core-01 sdnotify-proxy[2800]: 1 
Oct 06 09:33:22 core-01 sdnotify-proxy[2800]: None 
Oct 06 09:33:22 core-01 sdnotify-proxy[2800]: lol, wait now for someyime 
Oct 06 09:33:22 core-01 sdnotify-proxy[2800]: 0 
Oct 06 09:33:22 core-01 sdnotify-proxy[2800]: 1 
Oct 06 09:33:22 core-01 sdnotify-proxy[2800]: 2 
Oct 06 09:33:22 core-01 sdnotify-proxy[2800]: finished 
Oct 06 09:33:22 core-01 docker[2851]: watchdogged 
Oct 06 09:33:22 core-01 systemd[1]: Started Watchdog example service. 

回答

1

我注意到了一些事情。首先,Started Watchdog example service.行在程序退出后迟了3秒,表示READY=1未收到。设备“启动”后,看门狗监控功能才会启动。

此外,尝试记录使用print >>os.stderr作为输出到标准输出缓冲,很难看到时机。

你不应该有

Environment=NOTIFY_SOCKET=/run/%p.sock 
Environment=WATCHDOG_USEC=1000000 

,因为这些是由systemd设置。你应该通过--env,也是WATCHDOG_USEC通过代理插座,因为它会“丢失”,否则:

ExecStart=/usr/libexec/sdnotify-proxy /run/%p.sock /usr/bin/docker run \ 
--env=NOTIFY_SOCKET=/run/%p.sock --env=WATCHDOG_USEC=1000000 
+0

此外,你不应该甚至需要NOTIFY_SOCKET和WATCHDOG_USEC传递 - systemd应该设置这些环境变量为你当你有WatchdogSec设置。 –