- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有一台工作中的计算机,有时我会从家里醒来以便访问它,但是当启动并从我们的 DHCP 服务器获取另一个 IP 地址时,我该如何访问它?
情况和我的“工作流程”如下:
现在理论上,只要我知道它的 IP 地址,我就可以通过 SSH 连接到我的办公室 PC。有时它变得相同,有时它会改变。为了避免这种情况,我有以下想法:
所有计算机都运行 Linux;家里的 Ubuntu 14.04,办公室服务器上的 SLES,我办公室 PC 上的 OpenSUSE 13.1。这都不是问题。
为了让这一切正常工作,我只需要在我的办公室 PC 上安装一个脚本,该脚本可以在启动时当网络启动并运行时运行。
我的脚本(publish_ip.sh)如下:
# get own IP address:
ip=$(ip addr show | awk '$1=="inet" && $2 !~ /127\.0\.0\.1/ { split($2, a, "/"); print a[1]}');
# SSH to the office server (10.64.5.84) and write own IP address to a file there:
ssh -x -e none 10.64.5.84 "echo $(date) $ip >> office_pc_address.txt"
为了在启动时运行这个脚本,我为我的办公室 PC 创建了一个 systemd 服务文件 publish-ip.service:
[Unit]
Description=publishes own IP address
Wants=network.target
After=network.target
[Service]
Type=oneshot
ExecStartPre=/usr/bin/sleep 30
ExecStart=/home/perldog/bin/publish_ip.sh
User=perldog
[Install]
WantedBy=multi-user.target
但这是我在办公室 PC 上经常看到的:
linux-tz7m:/usr/lib/systemd/system # systemctl status publish-ip.service
publish-ip.service - publishes own IP address
Loaded: loaded (/usr/lib/systemd/system/publish-ip.service; enabled)
Active: failed (Result: exit-code) since Mon 2016-02-29 12:17:34 CET; 4 days ago
Process: 1688 ExecStart=/home/perldog/bin/publish_ip.sh (code=exited, status=255)
Process: 1016 ExecStartPre=/usr/bin/sleep 30 (code=exited, status=0/SUCCESS)
Main PID: 1688 (code=exited, status=255)
Feb 29 12:17:34 linux-tz7m publish_ip.sh[1688]: ssh: connect to host 10.64.5.84 port 22: Network is unreachable
很明显,我的服务启动并调用了我的脚本,但该脚本中的 SSH 命令失败并显示 Network is unreachable
。
我尝试了我的服务文件中的所有内容,以便它仅在 网络启动后运行,但我不明白。我试过 Wants=network.target
,After=network.target
、WantedBy=multi-user.target
,甚至还插入了一个ExecStartPre=/usr/bin/sleep 30
。没有任何效果。当我的脚本被调用并尝试通过 SSH 连接到办公室服务器时,我总是得到 Network is unreachable
。
问题:我的服务文件需要哪些设置才能使其仅在 办公室服务器可通过 SSH 访问后运行?
注意:当我在办公室并且我的办公室 PC 启动并运行时,我的脚本和服务都可以完美运行,即 systemctl start publish-ip.service
工作没有任何错误。
最佳答案
我尝试了所有这些目标,它们都在 DHCP 获得 IP 地址之前就已达到。去图:
network-online.target
remote-fs.target
nfs-client.target
dbus.service
起作用的是启用这两个:
systemctl enable systemd-networkd.service systemd-networkd-wait-online.service
然后设置
After=systemd-networkd-wait-online.service
Wants=systemd-networkd-wait-online.service
现在 DHCP 获得 IP 地址后它开始了。 (一个 mount point in my case ,但也可能是您的服务)
(在 debian9/stretch 上)
关于linux - systemd:在网络真正启动后在启动时启动服务(用于 WoL 目的),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35805354/
我想检测是否可以进行局域网唤醒。 在我的路由器(Tomato 固件)上有一个包含信息的表格 - 当显示设备“事件(在 ARP 中)”时 - 可以通过 WOL(离线 Linux 电脑)打开该设备。 我想
不久前,我 [在 Google 的帮助下] 写了一个小的 WOL 脚本来打开我网络中的计算机。这是脚本: exec /usr/bin/python -x "$0" "$@" # node_lst =
我正在尝试在我的 C# 应用程序中接收 WOL 包。我想它为什么不起作用的问题与我运行 DD-WRT 的路由器如何广播包有关。 我用来接收UDP包的代码: UdpClient udp = new
我有一台工作中的计算机,有时我会从家里醒来以便访问它,但是当启动并从我们的 DHCP 服务器获取另一个 IP 地址时,我该如何访问它? 情况和我的“工作流程”如下: 我从家里的 PC 连接到办公室的
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a softwar
我试图在所有接口(interface)上发送一个 WOL 包以唤醒网关(这是 DHCP 服务器,所以机器还没有 IP)。 而且我似乎只能将套接字绑定(bind)到 IP 和端口对... 所以问题是:如
你能给我完整的代码来通过网卡和 BIOS 的 WOL 选项打开联网计算机吗? 请提供所有详细信息并尝试给我工作代码。 最佳答案 using System; using System.Net.Socke
我想知道是否可以检查 WOL-request 是否已经 在计算机已开启的情况下收到。 (pInvoke,c#?) 如果计算机收到magic paket 并启动,Windows 会将相应的事件日志条目写
我是一名优秀的程序员,十分优秀!