[Unit]
Description=Twitter notifier daemon
# https://www.freedesktop.org/wiki/Software/systemd/NetworkTarget/#cutthecraphowdoimakenetwork.targetworkforme
After=network-online.target systemd-networkd-wait-online.service
Requires=network-online.target systemd-networkd-wait-online.service
[Service]
ExecStart=/opt/twitter_streams/venv/bin/python -m twitter.notifier
KillSignal=SIGINT
Restart=on-failure
RestartSec=10s
PrivateTmp=true
[Install]
WantedBy=multi-user.target
systemd + ubuntu 服务器 20.04 LTS
我编写了一个 python 脚本 - 一个将消息从 Twitter 转发到 Slack 的 Twitter 客户端。
问题是,每当系统重新启动时,我的脚本都无法正常运行,因为它会在互联网可用之前尝试连接到 Twitter API。如果我启用或重新启动它,它会正常工作,但在系统启动或重新启动时不起作用。
我试图要求(单独和一起):
network-online.target
systemd-networkd-wait-online.service
有任何想法吗?
答案1
古怪的解决方案:
偶然发现了同样的问题,找到了一个古怪的解决方案。
如果您将其添加到服务文件的服务部分,它将循环直到收到来自 Twitter 的响应。
ExecStartPre= /bin/sh -c 'until ping -c1 twitter.com; do sleep 1; done;'
解释:
只有当 ping 命令得到响应时,他才会继续执行 ExecStart。
这意味着在启动脚本之前您肯定会有网络连接。
唯一的缺点是每次启动或重新启动服务时,他都会 ping twitter.com。
关联:
更多信息:堆栈溢出!