揮発性のメモ2

知識をメモ書きしておく

udevでバックグラウンドで動くプログラムを起動する

USB機器を挿した契機で、ちょっと時間のかかるプログラムをバックグラウンドで起動したい。
ちょっと前までは nohup とか付けたプログラムを2段ロケットで呼べば動いていたけど、最近(Debianならstretchから?)ではdisownだろうがnohupだろうが 1秒も経たずに普通に殺してくるようになった。
以下、殺される方法

99-hogehoge-usb.rules

# USB機器が刺さったらなんかする
ACTION=="add"   , SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", RUN+="/usr/local/bin/hoge.sh"

hoge.sh

#!/bin/bash

# バックグラウンドで動かしたいプログラムの本体を呼ぶ
nohup /usr/local/bin/piyo.sh &>/dev/null </dev/null &

piyo.sh

#!/bin/bash

# バックグラウンドで動かしたいプログラムの本体
while :; do
  date +"%H:%M:%S.%N" >> /tmp/piyo.log
  sleep 0.01
done

nohupさえつけておけば死ぬことはないだろうと油断していたので、古いのから移植するときに
まずそもそも何が起きているのか把握するまでが大変だった。


askubuntu.com
unix.stackexchange.com