古怪的解决方案:

古怪的解决方案:
[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。

关联:

更多信息:堆栈溢出

相关内容