はじめに
ラズパイ(というかLinux OS)の自動起動の方法いろいろあるけど、適当にcrontabとかでやったら出来ない!って方向けです。
ラズパイ推奨
まず、ラズパイに推奨されているのはsystemdを使った自動起動です。よほどの理由がない限りこれでやりましょう。
systemdの自動起動の方法
nanoやviなどのテキストエディタを使用して、/etc/systemd/system/ディレクトリ内に.serviceファイルを作成します。例えば、your-service.serviceという名前でファイルを作成します。
sudo nano /etc/systemd/system/your-service.service
以下のテンプレートを使用して、ファイルに内容を記述します。内容はあなたのプログラムに合わせて適宜変更してください。
[Unit]
Description=My custom service
After=network.target
[Service]
Type=simple
User=pi
WorkingDirectory=/home/pi/your-program-directory
ExecStart=/usr/bin/python3 /home/pi/your-program-directory/your-script.py
Restart=on-failure
[Install]
WantedBy=multi-user.target
ファイルを作ったら
sudo systemctl daemon-reload #新しいサービスファイルを認識
sudo systemctl enable your-service.service #システム起動時に自動的に起動するように設定
sudo systemctl start your-service.service #サービスを起動
sudo systemctl status your-service.service #サービスの状態を確認
#以下適宜
sudo systemctl stop your-service.service # サービスストップ
sudo systemctl disable your-service.service #システム起動時に自動的に起動しないように設定
sudo systemctl restart your-service.service #サービス再起動
systemdでやってもできない!
とりあえずログを見てみる。
journalctl -u サービス名.service
考えられる原因
- .serviceファイルは /etc/systemd/system/ディレクトリですか?
- 実行ユーザーを指定していますか?デフォルトはrootユーザー
- 実行ディレクトリは実行ファイルがあるディレクトリですか?
(絶対パスで書いたら大丈夫だけど、相対パスの場合エラー出ることがある。)
大体これで治ります。
最後に
自分は初めて自動起動するときにいろいろな方法を見て、"crontabが一番便利そうだな"って思ってましたがsystemdが推奨の方法なのでこれを覚えましょう。
今回自動起動をやったことがない初心者の方向けに、自分が詰まったところを参考に書きましたがもし参考になれば幸いです。