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