質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

Q&A

解決済

1回答

5465閲覧

ラズパイ サービスファイル実行できない

raspypy

総合スコア247

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

0グッド

0クリップ

投稿2019/10/15 04:24

編集2019/10/15 07:00

##やりたいこと

サービスファイルを作成して、シャットダウンボタンの追加をしたいです。
参考先: http://hammmm.hatenablog.com/entry/2016/11/14/231337

##今の状況
shutdown.pyを実行すると、シャットダウン動作はできます。
この状態で、電源をOFFし、ラズパイを起動させます。
(サービスファイルによりシャットダウン動作が働いているはずなので)シャットダウンボタンを押してもシャットダウンしてくれません。

サービスファイルのStatusを確認すると、次の結果が表示されます。
"fail"になっている訳ではありませんが、"activating (auto-restart)となっています。

html

1pi@raspberrypi:~ $ sudo systemctl status shutdownbuttond 2● shutdownbuttond.service - Shutdown/Reboot raspberry pi by GPIO button input 3 Loaded: loaded (/usr/lib/systemd/system/shutdownbuttond.service; enabled; ven 4 Active: activating (auto-restart) (Result: exit-code) since Tue 2019-10-15 13 5 Process: 877 ExecStart=/home/pi/dev/3_Shutdown.py (code=exited, status=127) 6 Main PID: 877 (code=exited, status=127) 7 810月 15 13:16:28 raspberrypi systemd[1]: shutdownbuttond.service: Unit entered f a 910月 15 13:16:28 raspberrypi s

システムのログを確認すると、次の結果が表示されます。
"そのようなファイルやディレクトリはありません"のコメントがよく分かりません。

html

1Oct 15 15:34:55 raspberrypi systemd[1]: shutdown.service: Main process exited, code=exited, status=203/EXEC 2Oct 15 15:34:55 raspberrypi systemd[1]: shutdown.service: Unit entered failed state. 3Oct 15 15:34:55 raspberrypi systemd[1]: shutdown.service: Failed with result 'exit-code'. 4Oct 15 15:35:05 raspberrypi systemd[1]: shutdown.service: Service hold-off time over, scheduling restart. 5Oct 15 15:35:05 raspberrypi systemd[1]: Stopped Shutdown/Reboot raspberry pi by GPIO button input. 6Oct 15 15:35:05 raspberrypi systemd[1]: Started Shutdown/Reboot raspberry pi by GPIO button input. 7Oct 15 15:35:05 raspberrypi systemd[1240]: shutdown.service: Failed at step EXEC spawning /home/pi/dev/Shutdown.py: No such file or directory 8Oct 15 15:35:05 raspberrypi systemd[1]: shutdown.service: Main process exited, code=exited, status=203/EXEC 9Oct 15 15:35:05 raspberrypi systemd[1]: shutdown.service: Unit entered failed state. 10Oct 15 15:35:05 raspberrypi systemd[1]: shutdown.service: Failed with result 'exit-code'. 11Oct 15 15:35:16 raspberrypi systemd[1]: shutdown.service: Service hold-off time over, scheduling restart. 12Oct 15 15:35:16 raspberrypi systemd[1]: Stopped Shutdown/Reboot raspberry pi by GPIO button input. 13Oct 15 15:35:16 raspberrypi systemd[1]: Started Shutdown/Reboot raspberry pi by GPIO button input.

##サービスファイル・コード

プログラムコード

html

1#!/usr/bin/env python 2 3import RPi.GPIO as GPIO 4import os, time 5 6GPIO.setmode(GPIO.BCM) 7 8# GPIO18 : reset button 9GPIO.setup(18, GPIO.IN, pull_up_down = GPIO.PUD_UP) 10# GPIO23 : shutdown button 11GPIO.setup(23, GPIO.IN, pull_up_down = GPIO.PUD_UP) 12 13def shutdown(channel): 14 os.system("sudo shutdown -h now") 15 16def reboot(channel): 17 os.system("sudo reboot") 18 19GPIO.add_event_detect(23, GPIO.FALLING, callback = shutdown, bouncetime = 2000) 20GPIO.add_event_detect(18, GPIO.FALLING, callback = reboot, bouncetime = 2000) 21 22while 1: 23 time.sleep(100)

サービスファイル

html

1[Unit] 2Description=Shutdown/Reboot raspberry pi by GPIO button input 3Wants=network.target 4 5[Service] 6ExecStart=/home/pi/dev/Shutdown.py 7Restart=on-failure 8RestartSec=10s 9 10[Install] 11WantedBy=multi-user.target

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

追記: Shutdown.pyに実行属性がついていますか?

以下、コピペでこちらの環境では、正常にサービスが開始しました。
ちなみに、Shutdown.pyに実行属性がないと、Active: activating (auto-restart) (Result: exit-code)となって、動作しませんでした。

mkdir -p /home/pi/dev cat <<'EOF' > /home/pi/dev/Shutdown.py #!/usr/bin/env python import RPi.GPIO as GPIO import os, time GPIO.setmode(GPIO.BCM) # GPIO18 : reset button GPIO.setup(18, GPIO.IN, pull_up_down = GPIO.PUD_UP) # GPIO23 : shutdown button GPIO.setup(23, GPIO.IN, pull_up_down = GPIO.PUD_UP) def shutdown(channel): os.system("sudo shutdown -h now") def reboot(channel): os.system("sudo reboot") GPIO.add_event_detect(23, GPIO.FALLING, callback = shutdown, bouncetime = 2000) GPIO.add_event_detect(18, GPIO.FALLING, callback = reboot, bouncetime = 2000) while 1: time.sleep(100) EOF # 実行属性ついてる?? . chmod a+x /home/pi/dev/Shutdown.py cat << 'EOF' | sudo tee /usr/lib/systemd/system/shutdown_by_button.service [Unit] Description=Shutdown/Reboot raspberry pi by GPIO button input Wants=network.target [Service] ExecStart=/home/pi/dev/Shutdown.py Restart=on-failure RestartSec=10s [Install] WantedBy=multi-user.target EOF sudo systemctl daemon-reload sudo systemctl start shutdown_by_button sudo systemctl status shutdown_by_button

y_gijutsuさん、

ログで、No such file or directoryと出てますが、ファイルはありますか?

... Oct 15 15:35:05 raspberrypi systemd[1240]: shutdown.service: Failed at step EXEC spawning /home/pi/dev/Shutdown.py: No such file or directory ...

投稿2019/10/15 07:33

編集2019/10/16 02:07
mt08

総合スコア1825

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

raspypy

2019/10/15 09:37

ファイルはあります。
mt08

2019/10/16 02:05

追記しました。
Y.H.

2019/10/16 02:12

y_gijutsuさん 以下コマンドの結果を質問に追記ください。 ls -al /home/pi/dev/Shutdown.py
raspypy

2019/10/17 00:11

実行属性については、次の通りです。 -rwxr-xr-x 1 pi pi 573 10月 15 14:38 Shutdown.py Shutdown.pyファイルについて、 $ cat -e Shutdown.py コマンドで改行コードを確認したところ、 末尾が、^M$ (CR+LF)となっていることが分かりました。 これが"No such file or directory"の原因ではないかと考えています。 改行コードをLFに変換すべぐ、次のコマンドを実行しましたが、LFに変換できません、 何か間違えているのでしょうか。 $ tr -d ‘\r’ < Shutdown.py > Shutdwn.py $ file Shutdwn.py Shutdwn.py: a /us/bin/python script, ASCII text executable, with CRLF line terminators
mt08

2019/10/17 00:32

dos2unixを使うのはどうでしょう? sudo apt install -y dos2unix dos2unix ./Shutdwn.py
raspypy

2019/10/17 01:18

mt08さま 回答ありがとうございます。 取り急ぎ、原因を特定するため、 cat <<'EOF' > /home/pi/dev/Shutdown.py にて新たにファイルを作成しなおしました。 これにより、改行コードも$となり、 サービスファイルも動作することが確認できました。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問