揮発性のメモ2

http://d.hatena.ne.jp/iww/

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

[: missing ]

/usr/local/bin/hoge: 8: [: missing ]

というエラーが出て、その8行目は

[ -z "$ADDR"] || ADDR="HOGEHOGE"

という塩梅だった。


"[" が文法じゃなくて内部コマンドだということを失念していたため、[ ] を単なる飾りとして見ていて、: missing ってなんだろうとずっと思っていた。
/usr/local/bin/hoge の 8行目の "[" コマンドで、 ] が見つからないというエラーだった。
("$ADDR" と ] の間にスペースがないので1文字列として認識されて ] を見失ってた)
思い込みって怖い

grepでファイルシステムをまたがずに検索する

普通に / からgrepで全ファイル検索しようとすると、/sysや/procまでたどるので困る。
なので、同一ファイルシステム内だけで検索したい
(findなら -xdevが、cpなら -x がある)


unix.stackexchange.com

find / -xdev -type f -print0 | xargs -0 grep -I -H "hogehoge"
find オプション
-xdev ファイルシステムを跨がない
-print0 空白区切りでなく \0 区切りで出力する*1
xargs オプション
-0 空白区切りでなく \0 区切りで入力する
grep オプション
-I バイナリファイルは無視
-H 出力結果にファイル名を常に出す

何十年もみんな求めてる機能だし そろそろ実装されてもいい頃合いなんだけど、なかなか実装されないな

*1:ファイル名にスペースを使うアホが居ても困らないように

tmpfsでオーナーを指定する

wiki.archlinux.org

# ls -ld /hoge
drwxrwxrwx 2 root root 4096 May 22  2018 /hoge

# mount -o uid=www-data,mode=700 -t tmpfs tmpfs /hoge

# ls -ld /hoge
drwx------ 2 www-data root 40 Jun 29 10:00 /hoge

tmpfsは、オプションでパーミッションや所有者をちゃんと指定できる。
ext4みたいな適当なやつとはわけが違う

diffの結果を使ってdiffしやすくするやつ

diff -rq の出力結果を見ながら、さらに差分とったりコピーしたりをよくするんだけど

Files /tmp/hoge/www/test.html and /opt/piyo/www/test.html differ
Only in /opt/piyo/www: test.html.bak

みたいに Files ○○ and △△ differ とか余計な文字列が入っててウザい


ので、それを消すperlワンライナー

diff -rq /tmp/hoge /opt/piyo | perl -pe 's/Files (.+) and (.+) differ/diff \1 \2/; s/Only in (.+): (.+)/Only in \1\/\2/'
diff /tmp/hoge/www/test.html /opt/piyo/www/test.html
Only in /opt/piyo/www/test.html.bak

diffは行コピペできるようになる。 Onlyの方は一応ファイル名は使える

L-リジン

猫の病気で多いのが猫ヘルペスウィルス由来の風邪。
Feline Herpes Virus Type 1、略して FHV-1。 一応タイプ2もある。
目が腫れてたり、涙目や目ヤニ、結膜炎、くしゃみ鼻水が出たら猫ヘルペスの可能性が高い。
常在ウィルスみたいなもので、家ネコでも普通に罹患する。
年に一度接種する三種混合ワクチンや五種混合ワクチンの筆頭。

ヘルペスウィルスさんは主食が 非必須アミノ酸のアルギニン。
似た構造のアミノ酸である L-リジンがあったらそっちを使うが、単に似てるだけなので、その場合ウィルスは増殖できない。
つまり L-リジンには 猫ヘルペスの症状を抑える効果がある。ただし、治るわけではない。

L-リジンは必須アミノ酸だけど、摂り過ぎても特に副作用はない。
仔猫がたくさん食べたら良くないが、成猫ならわりとどうでもいい。
ただのアミノ酸だし、「うま味」としてサプリメント感覚で食わせて良い。

猫ヘルペスウイルス感染症 |猫感染症研究会
獣医さんに聞く!猫が風邪をひいたらどうすればいい?
猫ウイルス性鼻気管炎 - Wikipedia
PE L-リジンパウダー|法人のお客様向け情報【株式会社ぺティエンスメディカル】
猫のワクチン、接種したほうがいい理由 | 猫の栞
リジン | 犬と猫の栄養成分辞典
アミノ酸の種類と機能|アミノ酸ナビ|研究開発|協和発酵バイオ株式会社


猫用 L-リジン 50g
一日スプーン1杯 0.5g をカリカリにふりかけるとして、100日分

猫用でも人間用でも関係なさそうだったので、ペットショップやマツモトキヨシをあちこち歩いたけど
結局通販でしか売ってなさそうだった。