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

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

ただいまの
回答率

90.52%

  • Raspberry Pi

    803questions

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

  • sh

    283questions

    shは、UNIX系OSのシェル操作の1つであり、最も基本的なシェルのことです。

/etc/udev/rules.d/から呼び出されたスクリプトが強制終了される

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 827

NickName

score 1

前提・実現したいこと

raspberry pi 3 を利用して下記のようなシステムを構築しようとしております。
1.SDカード挿入時に/etc/udev/rules.dを利用して、2.のスクリプトが実行される
2.スクリプトの中でSDカードの中身を特定のディレクトリにコピー
3.ファイルリネームプログラム(JAVA:自作)呼び出し

この時、/etc/udev/rules.dによって呼び出されたスクリプトが途中で終了されてしまい、
コピー中や、リネーム中に処理が止まってしまいます。

該当のソースコード

/etc/udev/rules.dに格納しているファイルは50-CardInMultiReader.rulesという名前で、
内容は下記のとおりです。

ACTION=="add",\
DRIVERS=="sd",\
ATTRS{model}=="Flash Reader    "\
RUN:="/mnt/data/Systems/Scripts/sdcard_sync.sh"

/mnt/data/Systems/Scripts/sdcard_sync.shの中身は下記のとおりです

#!/bin/bash

TO1_MAIL=test@example.com
MSG_BACKUP_S="バックアップを開始しました"
MSG_BACKUP_N="バックアップ可能なメディアではありませんでした"
MSG_BACKUP_E="バックアップを完了しました"
LOGF_PATH=/mnt/data/Share/Temp/targets/sdCopy.log

if [[ "$DEVNAME" =~ sd[c-z][0-9]  ]]; then
  echo $MSG_BACKUP_S | mail -s "data backup" $TO1_MAIL
else
  exit 1
fi

echo pid=$$ >> $LOGF_PATH

hoge=0
while :
do
    sleep 1; echo `date` >> $LOGF_PATH
    if [ $hoge -gt 3000 ] ; then
      echo "over 3000" >> $LOGF_PATH
      break
    fi
done
#本来はここでファイルコピーとリネームスクリプトの呼び出し

試したこと

上記の状態で、USBのカードリーダーのSDカードの抜き差しをした所、
sdCopy.logに下記の通りの出力があり、その後ログ出力が止まりました。

pid=12781
Fri Jan 13 00:06:10 JST 2017
Fri Jan 13 00:06:11 JST 2017
Fri Jan 13 00:06:12 JST 2017
Fri Jan 13 00:06:13 JST 2017
Fri Jan 13 00:06:14 JST 2017
Fri Jan 13 00:06:15 JST 2017
Fri Jan 13 00:06:16 JST 2017
Fri Jan 13 00:06:17 JST 2017
Fri Jan 13 00:06:18 JST 2017
Fri Jan 13 00:06:19 JST 2017
Fri Jan 13 00:06:20 JST 2017
Fri Jan 13 00:06:21 JST 2017
Fri Jan 13 00:06:22 JST 2017
Fri Jan 13 00:06:23 JST 2017
Fri Jan 13 00:06:24 JST 2017
Fri Jan 13 00:06:25 JST 2017
Fri Jan 13 00:06:26 JST 2017
Fri Jan 13 00:06:27 JST 2017
Fri Jan 13 00:06:28 JST 2017
Fri Jan 13 00:06:29 JST 2017
Fri Jan 13 00:06:30 JST 2017
Fri Jan 13 00:06:31 JST 2017
Fri Jan 13 00:06:32 JST 2017
Fri Jan 13 00:06:33 JST 2017
Fri Jan 13 00:06:34 JST 2017
Fri Jan 13 00:06:35 JST 2017
#このあとはログ出力がされなくなってしまう

この時のプロセスを監視してみた所、下記のような表記でした

Every 0.5s: ps auxw | grep sdcard_sync.sh                                                                      Fri Jan 13 00:06:19 2017

pi        1367  1.6  0.2   3744  2304 pts/0    S+    112   0:25 watch -n 0.5 -d ps auxw | grep sdcard_sync.sh
root     12781  0.1  0.2   3496  2636 ?        S    00:06   0:00 /bin/bash /mnt/data/Systems/Scripts/sdcard_sync.sh
pi       12923  0.0  0.0   3740   276 pts/0    S+   00:06   0:00 watch -n 0.5 -d ps auxw | grep sdcard_sync.sh
pi       12924  0.0  0.0   1912   408 pts/0    S+   00:06   0:00 sh -c ps auxw | grep sdcard_sync.sh
pi       12926  0.0  0.2   3780  2004 pts/0    S+   00:06   0:00 grep sdcard_sync.sh

補足情報(言語/FW/ツール等のバージョンなど)

作業環境は以下のとおりです
Distributor ID: Raspbian
Description:    Raspbian GNU/Linux 8.0 (jessie)
Release:        8.0
Codename:       jessie

何をどう調べていくのが適当なのかがわからない状態です。
途中で止まってしまう原因の探し方、もしくは原因などご教示いただけましたら幸いです。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

check解決した方法

0

申し訳ありません。
別の質問で回答をいただきました。

こちらは
http://unix.stackexchange.com/questions/28548/how-to-run-custom-scripts-upon-usb-device-plug-in/28711#28711
にあります通り、他のデーモンの処理を邪魔しないために、タイムアウトするのが仕様となっております。

したがって、ここで呼び出したスクリプト自体で処理を行うのではなく、atコマンドに渡して処理を行うのが正解です。

raspbianにはatコマンドがインストールされておりませんので、sudo apt-get install at で導入後、ご利用ください。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 90.52%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • Raspberry Pi

    803questions

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

  • sh

    283questions

    shは、UNIX系OSのシェル操作の1つであり、最も基本的なシェルのことです。