概括

概括

概括

我正在尝试在 Beaglebone Black 系统上设置静态 IP。(运行 Debian 9)

到目前为止,我已经尝试过;

  • 编辑 /etc/network/interfaces

  • 创建 shell 脚本并从 systemd 运行它

到目前为止,这两种方法都没有奏效。我将在本文末尾详细解释这两种方法,但在此之前:

  • 使用 Debian 9 设置静态 IP 的正确 (最合理) 方法是什么? 是否存在许多可能的方法,并且它们都同样有效?

需要指出几点:

  • 我知道ifconfig不同于ip并且ip已经“取代”了旧程序ifconfig- 但是在我的系统上这两个命令都有效。我不知道为什么会这样。ifconfig不是 的别名,因为ip addr输出不同。我不知道它们之间有什么区别。

  • 我对 systemd 一无所知,我只是复制了在网上找到的信息这里

细节

  • /etc/网络/接口

我已经添加了行

iface eth0 inet static
    address XXX.XXX.XXX.XXX (redacted for obvious reasons)
    netmask 255.255.255.0
    gateway XXX.XXX.XXX.XXX

当我重新启动并运行ifconfig或时,ip addr我可以看到 eth0 具有与我“分配”的完全不同的 ip/etc/network/interfaces

我以为这会起作用,因为我熟悉这种方法。所以我不明白出了什么问题,也不知道该如何测试/调试。

  • systemd

我编写了一个 shell 脚本,用于/home手动设置 ip。该 shell 脚本包含:

ifconfig eth0 XXX.XXX.XXX.XXX netmask 255.255.255.0
route add default gw XXX.XXX.XXX.XXX eth0

加上一条额外的调试线路

echo "systemd" > /home/test.txt

如果我从 bash 命令行以 root 身份运行此脚本(它由 root 拥有),则 ip 将按预期更改。(ifconfig显示预期的静态 ip)

我尝试通过添加一个/etc/systemd/system名为的新文件来让 systemd 执行此脚本network-set-static-ip.service

该文件/etc/systemd/system/network-set-static-ip.service包含

[Unit]
After=networking.service

[Service]
ExecStart=/home/set_ip_static.sh

[Install]
WantedBy=default.target

我以前从未使用过 systemd,我不知道这一切是否正确,或者是否完全错误。

重新启动系统不是导致文件/home/test.txt被创建,所以我认为 systemd不是运行脚本/home/set_ip_static.sh

我做错了什么吗? 有什么方法可以调试 systemd 并找出问题所在吗?

结论

最后,我要说的是,我不在乎使用哪种方法来静态设置 IP 地址。 如果有更好的选择,可以是这两种方法之一,也可以是完全不同的东西。

只要在系统启动时将IP设置为静态值,那就足够了。

答案1

笔记

这个答案并不是针对上述问题中指定的两个问题/议题的“答案”,但它是一种可行的替代方案。

参考:

https://elritsch.github.io/2017/08/02/execute-script-at-linux-startup.html

https://elritsch.github.io/2017/08/02/execute-script-at-linux-startup.html

脚步

这适用于使用 systemd 的 Debian 9。

  1. 创建要运行的脚本,例如/home/script.sh使其可执行(chmod +x /home/script.sh

  2. /etc/rc.local创建一个与 SysVinit 系统共存的文件,并使其可执行

  3. 创建/etc/systemd/system/rc-local.service。添加此内容

[Unit]
Description=/etc/rc.local
ConditionPathExists=/etc/rc.local
    
[Service]
Type=forking
ExecStart=/etc/rc.local start
TimeoutSec=0
StandardOutput=tty
RemainAfterExit=yes
SysVStartPriority=99
    
[Install]
WantedBy=multi-user.target
  1. 编辑/etc/rc.local,添加此内容
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

/home/script.sh #add this line to exec script/commands

exit 0
  1. 确保所有脚本均可执行,并使用以下命令启用 systemd 服务systemctl enable rc-local

  2. 重启

关键字:systemd sysv sysvinit debian 9 linux 在启动时运行启动脚本

相关内容