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

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

新規登録して質問してみよう
ただいま回答率
85.48%
bash

bash(Bourne-again-Shell)は sh(Bourne Shell)のインプリメンテーションに様々な機能が追加されたシェルです。LinuxやMac OS XではBashはデフォルトで導入されています。

systemd

systemdは、Linuxの起動処理及びシステム管理を行う技術です。他にも多くのサービス管理機能を備えており、ユーザープロセスを並列に起動しシステムの起動処理に要する時間を短縮できるなどの特徴があります。

Raspbian

Raspbianは、DebianベースのRaspberry Pi用ディストリビューション。ハードウェア浮動小数点演算を有効にすることが可能で、Webブラウズなどの速度を向上できます。

Raspberry Pi

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

Q&A

解決済

3回答

1109閲覧

systemdで再起動時ファイル実行を行うと成功するものとしないものがある

YuichiKawamura

総合スコア21

bash

bash(Bourne-again-Shell)は sh(Bourne Shell)のインプリメンテーションに様々な機能が追加されたシェルです。LinuxやMac OS XではBashはデフォルトで導入されています。

systemd

systemdは、Linuxの起動処理及びシステム管理を行う技術です。他にも多くのサービス管理機能を備えており、ユーザープロセスを並列に起動しシステムの起動処理に要する時間を短縮できるなどの特徴があります。

Raspbian

Raspbianは、DebianベースのRaspberry Pi用ディストリビューション。ハードウェア浮動小数点演算を有効にすることが可能で、Webブラウズなどの速度を向上できます。

Raspberry Pi

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

0グッド

0クリップ

投稿2019/02/27 10:44

systemdでb.serviceというファイルにrun.pyというファイルをOS起動時に実行するように記述した後、
再起動したのですが実行していませんでした。
しかし,sudo systemctl start b.serviceを行ったところ,run.pyが実行している事が確認できたためb.serviceがrun.pyを実行するファイルになっている事は間違いないようです。
この場合再起動時にb.serviceが動作していないと考えるのが妥当だと思うのですが、どういった原因でそうなってしまっていると予測されるでしょうか?

前提として、sudo systemctl enable b.serviceも行っています。
ホームディレクトリにある別のPythonのファイルは再起動時の実行に成功しました。

OS再起動直後の実行状態確認↓
イメージ説明

b.service↓
イメージ説明

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

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

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

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

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

guest

回答3

0

起動時に実行されていないのは、

dmesg | grep systemd

の結果で、エラーが出ているのではないでしょうか。

ネットワークの後に起動するのであれば、普通は、

[Unit] After=network.target

を追加しておけば、大丈夫だと思うのですが...

systemctl enable systemd-networkd-wait-online

を使うのであれば、下記のように書き換えておく必要があると思います。

[Unit] After=network-online.target

もし、インターネットに接続に行くようなものであれば、nss-lookup.target も一緒に追加しておいた方が良いかもしれません。

投稿2019/02/28 04:55

編集2019/02/28 04:56
CHERRY

総合スコア25171

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

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

0

自己解決

以下のようにb.serviceの記述を変更するか、run.pyの先頭に数秒のスリープ(今回は15秒)を入れることで再起動時の実行が可能になった。

[Unit]
Description=excute run.py
After=network.target remote-fs.target nss-lookup.target

[Service]
ExecStart=/usr/bin/python3 /home/pi/Documents/Interphone/slackbot_test/run.py

[Install]
WantedBy=network-online.target

投稿2019/02/28 08:28

YuichiKawamura

総合スコア21

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

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

scsi

2019/02/28 09:38

私だったらexecstartpreで事前チェックスクリプトを定義しますね。
guest

0

IPアドレスがインターフェースに割り当てられる前に起動しようとしてbindに失敗するとかはよくありますねー。messagesにエラー原因が出力されてると思いますよ。

投稿2019/02/27 11:01

scsi

総合スコア2840

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

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

YuichiKawamura

2019/02/28 00:46

アドバイスありがとうございます。 /var/log/messagesにLinuxのログが残っているのですね。 調べてみたところ、下記いずれのコマンドもgrepにヒットしませんでした。 less /var/log/messages | grep b.service less /var/log/messages | grep run.py ちなみに、a.serviceに/usr/bin/motionの実行を定義していて、こちらはOS再起動時に実行がされているのですがgrepで下記の検索をしてもヒットしませんでした。(3日前ならヒットするものがある) (ただしこちらは目視で確認するとmotionが立ち上がっていると思しきLogを確認できる. less /var/log/messages | grep a.service less /var/log/messages | grep motion* あとsystemdのLogが残っているかと思い,以下のようにgrep検索してみたのですがこちらも今日はLogが残っていませんでした。(3日前ならヒットするものがある) まとめるとsystemd, a.service, run.pyともgrep検索にかからないのですが、エラーコード自体が出ていないという認識でよいでしょうか。。
YuichiKawamura

2019/02/28 01:13

https://qiita.com/umchifre/items/8ca6607d2008b465b377 こちらの記事を参照して以下のコマンドでログを確認したところ、 その下に続くようなログが得られました。 確かにネットワークのコネクションに失敗している様子です。 journalctl -xe -u b.service 2月 28 08:51:12 interphone python3[304]: File "/usr/lib/python3/dist-packages/requests/adapters.py", line 487, in send 2月 28 08:51:12 interphone python3[304]: raise ConnectionError(e, request=request) 2月 28 08:51:12 interphone python3[304]: requests.exceptions.ConnectionError: HTTPSConnectionPool(host='slack.com', port=443): Max retries exceeded with url: 2月 28 08:51:12 interphone systemd[1]: b.service: Main process exited, code=exited, status=1/FAILURE 2月 28 08:51:12 interphone systemd[1]: b.service: Unit entered failed state. 2月 28 08:51:12 interphone systemd[1]: b.service: Failed with result 'exit-code'.
YuichiKawamura

2019/02/28 03:21

ネットワークが立ち上がった後にサービスを動かすために以下のコマンドを実行して再起動を行ってみたのですが結果は変わらない状態です。 # systemctl enable systemd-networkd # systemctl enable systemd-networkd-wait-online
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問