rc.local 是添加 pon 启动和网络路由更改的最佳位置吗?

rc.local 是添加 pon 启动和网络路由更改的最佳位置吗?

我已经关注了本指南得到一个与我的 pi 零联网的 4G 帽子,一切看起来都很好。一旦pon在后台启动并添加了一条路由,我就可以进行 ping 操作。

我想要的是让 pi 启动并pon运行,并且已经添加路线。

我目前正在文件中执行此操作rc.local,但我很确定这是一种非常肮脏的方法:

sleep 20
sudo pon &
sleep 20
sudo route add -net "0.0.0.0" ppp0

exit 0

ppp0最终,我想在执行任何 python 之前确保网络在新定义的路线上正常运行。

我看过这个类似的问题但不确定正确的方法:可以通过pre-up.d某种接口更改来完成吗?

任何帮助将不胜感激。

答案1

您可以创建一个在启动时通过 systemd 执行的脚本。

首先为命令创建一个脚本。确保其具有执行权限。

接下来创建一个服务文件,/etc/systemd/system文件名以以下部分结尾.service并包含以下部分:

[Unit]
Description=Description of script/service

[Service]
ExecStart=/bin/bash [path to script]

[Install]
WantedBy=multi-user.target

然后重新加载systemctl守护进程

systemctl daemon-reload

最后,使用 systemctl 安装脚本,文件名如下servicename

systemctl enable --now [servicename]

有关的:

答案2

回答我自己的问题:

我的做法是创建 x2 systemd 服务并更改路由表。

  1. 4gpon.service用于在后台启动pon:
[Unit]
Description=4G hat networing

[Service]
Type=forking
ExecStart=/usr/bin/pon
ExecStop=/usr/bin/poff
Restart=always

[Install]
WantedBy=multi-user.target
  1. 更新路由表以默认启用 ppp0
sudo ip route delete default
sudo ip route add default dev ppp0
sudo nano /etc/network/interfaces.d/ppp0

# add:
auto ppp0
iface ppp0 inet provider
up ip route add default dev ppp0

那么另外到此处定义的值对于这个文件,也添加这个:

sudo nano /etc/ppp/peers/provider

# add at bottom:
replacedefaultroute
  1. garage-motion.service在知道第一个服务启动后调用python
[Unit]
Description=Motion detector service
After=network.target network-online.target 4gpon.service

[Service]
Type=simple
Environment="AWS_DEFAULT_REGION=***your-region***"
Environment="AWS_ACCESS_KEY_ID=***your-key***"
Environment="AWS_SECRET_ACCESS_KEY=***your-secret-key***"
ExecStart=/bin/sh -c '/home/pi/projects/garage-motion/venv/python3 /home/pi/projects/garage-motion/venv/garage-motion.ph --serve-in-foreground'
Restart=on-abort

[Install]
WantedBy=multi-user.target

相关内容