Raspbian StretchにRaspberry Piがあり、起動時にいくつかのGPIOピンをアクティブにしたいと思います。
私は次のサービスを書いた。
[Unit]
Description=GPIO23 exported as output, value off
[Service]
Type=oneshot
ExecStart=/bin/bash -c 'echo "23" > /sys/class/gpio/export'
ExecStart=/bin/bash -c 'echo "out" > /sys/class/gpio/gpio23/direction'
ExecStart=/bin/bash -c 'echo "0" > /sys/class/gpio/gpio23/value'
StandardOutput=null
[Install]
Alias=gpio23.service
SSH経由でログインしたら、結果を確認してください。
pi@Hi-Fi:~ $ systemctl status gpio23
● gpio23.service - GPIO23 exported as output, value off
Loaded: loaded (/lib/systemd/system/gpio23.service; linked; vendor preset: enabled)
Active: inactive (dead)
pi@Hi-Fi:ls /sys/class/gpio/
export gpiochip0 unexport
まだ実行されていないか、期待どおりに機能していないため、サービスを手動で開始しました。
pi@Hi-Fi:~ $ sudo systemctl start gpio23
[sudo] password for pi:
pi@Hi-Fi:~ $ systemctl status gpio23
● gpio23.service - GPIO23 exported as output, value off
Loaded: loaded (/lib/systemd/system/gpio23.service; linked; vendor preset: enabled)
Active: inactive (dead)
Jan 01 19:31:12 Hi-Fi systemd[1]: Starting GPIO23 exported as output, value off...
Jan 01 19:31:12 Hi-Fi systemd[1]: Started GPIO23 exported as output, value off.
pi@Hi-Fi:~ $ ls /sys/class/gpio/
export gpio23 gpiochip0 unexport
今大丈夫です。
すぐに期待どおりに機能させるにはどうすればよいですか?
答え1
[インストールする] エイリアス=gpio23.service
WantedBy
そのセクションに設定がないことに気づくのと同じくらい簡単です。サービスを有効にするようにsystemdに指示しましたが、実際に有効にしたときにどのターゲットがサービスを要求するかを説明していません。
標準出力 = 空
これを毎日実践するのは賢明ではありません。実際の問題が発生するまで標準出力を記録してください(いくつかのコマンドの場合とは明らかに異なりますecho
)。
ExecStart=/bin/bash ...
同様に、Bashismに明示的に依存して(再び)特定のコマンドを使用しない限り、Bourne Againシェルの名前を指定しないでくださいecho
。
10年前、DebianとUbuntuの人々はシステムブートプロセスからBourne Againシェルを削除し、それを非対話モードで初期化オーバーヘッドがはるかに少ないAlmquistシェルに置き換えるために多くの労力を費やしました。 。どこでも利用可能/bin/bash
- システム化されたサービスデバイスでも利用可能! — 代わりに/bin/sh
、この良いことを台無しにします。