rc.localが電話の起動とネットワークルーティングの変更を追加するのに最適な場所ですか?

rc.localが電話の起動とネットワークルーティングの変更を追加するのに最適な場所ですか?

私はフォローしましたこのガイド私のパイにインターネット接続が全くない4G帽子を手に入れたので、すべてが大丈夫です。ponバックグラウンドで開始され、パスが追加されたらpingを送信できます。

私が望むのは、パイを操作してパスを追加するponことです。

私は現在fileでこれをやっていますが、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システムサービスを作成し、ルーティングテーブルを変更することでした。

  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

関連情報