我已经关注了本指南得到一个与我的 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 服务并更改路由表。
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
- 更新路由表以默认启用 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
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