監視。
訳あって今週は、途中から「監視係」みたいになり
他の作業が全然進まないので
一時的にしか使用しないけど、監視ツールを作ってみたら、
あれこれ罠が。
てな訳で、メモ。
・cron に仕掛けたスクリプトで、リモートサーバー上でスクリプトを実行させる時の罠
* * * * * スクリプトA
このスクリプトAは、shell でも perl でも何でも良いんだけど
こん中で、とにかくリモートサーバー上のスクリプトを
以下のようにして叩く、と。
ssh リモートサーバー スクリプトBのパス 引き数
で、この結果起動するスクリプトBが shell で
かつ shell の中で「cd」すると実行出来ない…orz
cron で起動した場合、
「PATHが通ってなくて UNIXコマンドが起動しなかった」というのは
以前の会社でくらっていたので、またそのパターンかと思い、
cd のフルパスを調べると…
$ which cd…と出てしまい、cd は BASH_BUILTINS なのだそうで。がーん。alias cd xxxx
てな訳で、私のへなちょこレベルじゃお手上げだったので
すぐに諦めたよ、cd。
でも、何故そもそも cd したかったか?っちゅーと
とあるディレクトリ内で grep かけて、
特定の文字列を含むファイル名を取得したかったのだけど
$ grep -l 文字列 /xxx/xxx/xxx/xxx/xxx/xxx/*.htmlなどとやったら
「引き数が長すぎます」などと表示されたので、
まずはそのディレクトリまで移動しようと、cd を使ったので。
つまりは「検索出来りゃーいい」訳です。えいっ。
$ find /xxx/xxx/xxx/xxx/xxx/xxx/ -name '*.html' -exec grep -l 文字列 {} \;
あーあー。なんてこったい。なんか無駄だ。無駄なんだ。でも仕方ないのさ。うー。
・リモートサーバー上のperlスクリプトに引き数を使って実行すると Insecure dependency とかで怒られる
$ ssh リモートサーバー スクリプトCのパス 引き数
問題は、スクリプトCの中で
cp だの mkdir だのしてるからなんだけど、
仕方ないので $ENV{'PATH'} = ''; にしといて
cp はフルパスで起動したり、
引き数に対して…
my $string = $ARGV[0];などと書いて誤魔化して$string =~ /(/*)/;
my $untaintString = $1;
動かしました。うー。
・CPANモジュールの File::Copy はタイムスタンプをキープしない
悲しいかな、バックアップの為に File::Copy を使ったら
コピーしたファイルのタイムスタンプが、
コピーした時刻になってもた orz
仕方ないので急いでたし system("cp -p xxx"); としました。
すいません。ごめんなさい。へなちょこの嵐です。うー。
なにはともあれ、監視ツールは一応完成したので
今週末、会社に出てきて監視とか
監視チームに何かお願いするとかって事なく
今に至りますがーーー…
・・・ほんとに今頃ちゃんと動いてるといいなぁー(大汗)