概括
我正在尝试在 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。
创建要运行的脚本,例如
/home/script.sh
使其可执行(chmod +x /home/script.sh
)/etc/rc.local
创建一个与 SysVinit 系统共存的文件,并使其可执行创建
/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
- 编辑
/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
确保所有脚本均可执行,并使用以下命令启用 systemd 服务
systemctl enable rc-local
重启
关键字:systemd sysv sysvinit debian 9 linux 在启动时运行启动脚本