【systemd】Jetsonで起動時に自動でファンを回す
カフェチームの山本です。
現在カフェでは、Jetson Xavier NXを利用しています。処理性能が高く重宝しているのですが、かなり発熱するため、ファンを回した状態で処理を実行する必要があります。実際に店舗(カフェ)で利用する際は、プログラムの起動は手作業ではなく自動で行う必要があるため、ファンの起動も自動で行う必要があります。
今回は、ファンの起動を自動化するため、Linuxのsystemdという仕組みを利用して、OS起動時にスクリプトを実行するように設定しました。ちょっと調べるのに時間がかかったため、備忘録も兼ねて記事にしました。
実行したい内容
Jetsonでファンを回すには、通常以下のようなコマンドを実行します。
sudo sh -c 'echo 255 > /sys/devices/pwm-fan/target_pwm'
/sys/devices/pwm-fan/target_pwmにアクセスするには、sudoで実行する必要があり、手入力でパスワードを入力します。
これを起動時に自動的に実行されるようにします。
登録手順
ステップ1:実行スクリプトを作成する
以下のような、実行用スクリプトを作成します。systemdで登録する場合、sudoコマンドを書く必要はありません(書いても動きます)。
- /home/yamahiro/run_fan.sh
sh -c 'echo 255 > sys/devices/pwm-fan/target_pwm'
今回のように1行程度のコマンドであれば、そのままServiceファイル(ステップ2で後述)に書いても良いかも知れませんが、長いコマンドを実行する場合も考えると、スクリプトファイルにまとめたほうが良いでしょう。
ステップ2:Service登録用のファイルを作成する
systemdにUnitとして登録するための設定ファイルを作成します。
nano run_fan.service
- Service登録用のデータ:run_fan.service
[Unit] Description=start running Jetson's fan at max speed [Service] WorkingDirectory=/home/yamahiro ExecStart=/bin/sh run_fan.sh [Install] WantedBy=default.target
設定項目の意味はそれぞれ以下のようです。
- [Unit] Description:Serviceの説明(テキスト形式、任意の長さ)
- [Service] WorkingDirectory:Serviceを実行する作業ディレクトリ
- [Service] ExecStart:Service起動時に実行するコマンド。最初コマンドは絶対パスで記述する必要があります。shのみにすると、Service実行時にエラーになります。
- [Install] WantedBy:Service間の依存関係。default.target(デフォルトで起動するようにsystemdに設定されているUnit)を指定することで、systemdの起動時に登録したサービスを起動するように設定できます。
ステップ3:Serviceを有効化する
作成したスクリプトをsystemdのフォルダ(/etc/systemd/system/)に移動します。
sudo mv run_fan.service /etc/systemd/system/
移動したファイルを指定して、Serviceをsystemdに登録します。
systemctl enable run_fan
これによって、OSを起動した際に、ステップ2のServiceが起動され、ステップ1のスクリプトが実行されるようになります。
(ステップ4:動作を確認する)
もし、再起動することなく動作を確認したい場合、以下のコマンドを実行して起動することができます。
systemctl start run_fan
まとめ
JetsonでOSを起動した際にファンを自動で回すために、systemdによってServiceを起動する方法をまとめしました。ご参考になれば幸いです。