Linux Debian systemd服务在网络准备就绪之前启动

Linux Debian systemd服务在网络准备就绪之前启动,linux,debian,systemd,Linux,Debian,Systemd,OS:Debian Jessie 我想在每次系统启动时更新用户文件夹中的git存储库 我用cron@reboot entry尝试了这个。Cron启动得太早,结果给我发了一封邮件:“SSH:无法解析主机名…” 然后我尝试了SysV init脚本。效果-相同 目前,我正在尝试systemd服务,并使用相同的错误报告 /usr/bin/git_回购 #! /bin/sh # Description: Updates local git repository with latest cont

OS:Debian Jessie

我想在每次系统启动时更新用户文件夹中的git存储库

我用cron@reboot entry尝试了这个。Cron启动得太早,结果给我发了一封邮件:“SSH:无法解析主机名…”

然后我尝试了SysV init脚本。效果-相同

目前,我正在尝试systemd服务,并使用相同的错误报告

/usr/bin/git_回购

#! /bin/sh
# Description:       Updates local git repository with latest content
#cd /home/tanglor/repo
su -c'cd repo;git pull' - tanglor
/etc/systemd/system/repo.service

[Unit]
Description = Updates local git repository with latest content
Wants=network-online.target
After=network-online.target
[Service]
Type=oneshot
ExecStart=/usr/bin/repo
[Install]
WantedBy=multi-user.target
仍然没有结果。我的意思是在syslog中我发现:

Sep 30 19:41:59 Khlavan repo[422]: ssh: Could not resolve hostname bitbucket.org: Name or service not known
Sep 30 19:41:59 Khlavan repo[422]: fatal: Could not read from remote repository.
Sep 30 19:41:59 Khlavan repo[422]: Please make sure you have the correct access rights
Sep 30 19:41:59 Khlavan repo[422]: and the repository exists.
Sep 30 19:41:59 Khlavan systemd[1]: repo.service: main process exited, code=exited, status=1/FAILURE
Sep 30 19:41:59 Khlavan systemd[1]: Failed to start Updates local git repository with latest content.
Sep 30 19:41:59 Khlavan systemd[1]: Unit repo.service entered failed state.
如何在每次系统启动时实现存储库更新


一种解决方案是使用带有sleep命令的脚本,该命令将等待某个ssh测试成功,然后完成。但这是最后的解决办法,我想通过这本书来解决这个问题。

您可能应该查看systemd文档,以找到最适合您的解决方案,但这里有几个链接可以帮助您

许多网络管理解决方案提供了一种无条件引入network-online.target的方法,从而将network.target的效果升级为network-online.target的效果

如果使用NetworkManager,可以通过启用NetworkManager联机等待来完成此操作。服务:

systemctl启用网络管理器在线等待。服务

如果您使用systemd networkd,您可以通过启用“systemd networkd在线等待”来完成此操作。服务:

systemctl启用systemd网络并在线等待。服务

这将确保所有配置的网络设备都已启动,并在继续引导之前分配了IP地址。此服务将在90秒后超时。启用此服务可能会大大延迟启动,即使未达到超时。默认情况下,这两个服务都被禁用

或者,您可以更改需要网络启动的服务,以包括

After=network-online.target
Wants=network-online.target
(freedesktop.org,2015年):

检查手册页中的Before=,After=选择选项。这些选项用于更改系统启动设备的顺序,然后选择您必须启动的设备



如果不是为了解决您的问题,而是为了找到解决问题的方法,希望这会对您有所帮助。

非常感谢。启用NetworkManager-wait-online.service解决了此问题。其他方法——比如向network.target和network-online.target添加依赖项是不够的。我与OP by在lighttpd、bind和postfix(所有绑定到特定IP)方面存在相同的问题<代码>网络在线。目标似乎不起作用。这太疯狂了。如果您不经常重新启动怎么办?
一种解决方案是使用带有sleep命令的脚本,该命令将等待ssh测试成功,然后完成这是迄今为止我找到的唯一可靠的解决方案。Systemd很奇怪。