nemui4の日記: cronで動かすと結果がfileに書き込めてない 11
日記 by
nemui4
直にshell scriptを動かすとちゃんとfileに書き込めているし。
たしか前にもこの現象があって、その時は解決したんだけど。
原因はパーミッションかパス設定が甘いかのだったはずだけど、見直しても上手く行かない・・・
しばらく離れて頭冷やして見直そう。
直にshell scriptを動かすとちゃんとfileに書き込めているし。
たしか前にもこの現象があって、その時は解決したんだけど。
原因はパーミッションかパス設定が甘いかのだったはずだけど、見直しても上手く行かない・・・
しばらく離れて頭冷やして見直そう。
長期的な見通しやビジョンはあえて持たないようにしてる -- Linus Torvalds
PATHなら環境変数 (スコア:2)
自分の経験からよくハマるのは、
・PATH指定に環境変数を使っている → env 経由でテストしてみる
・umask を仮定している → スクリプト中で umask を指定する
あたりですが、どうでしょう。
# たまにハマるのは、/etc 以下に設定したときのユーザ名の指定漏れ
Re:PATHなら環境変数 (スコア:1)
> env 経由でテストしてみる
テスト用の改造がそれでOKならさらに本番用にもenv経由版を適用 deploy する、
ということはあまりやらないと思いますが、それって何がどう問題でしたっけ?
umaskも類題だと思うけど。
>ユーザ名の指定漏れ
LDAP,group他経由を操作してリテラル値ベタ書きしないほうが…
(それが適わない故の折り合い?)
Re:PATHなら環境変数 (スコア:1)
みなさんいろいろありがとうです。
環境変数見直して、コマンドもファイルも全てフルパスに書き直してみた。
atで実行するとちゃんとファイル吐いたのに、cron経由だと一部空行になってる、エラーは出ない。
「一部」がおかしいのがヒントになってきた。
パイプで多重(9)連結してるコマンドのどこかで漏れてるので、それを一個ずつ検証したら解決するはず。
でも本業が忙しくなってきたのでペンディング(無期限)
at がaccept, cron 実行がdeny (Was: Re:PATHなら環境変数) (スコア:1)
script の 標準出力, 標準エラー出力を /dev/null
(が嫌なら実行結果私的ログファイル) にリダイレクトすると
もう少し状況が見えてこないか?
後者ならもすこし得られる情報が増えると見込める
hogehoge.sh 2>&1 > output.log
Re:at がaccept, cron 実行がdeny (Was: Re:PATHなら環境変数) (スコア:1)
今回はエラーは出てなくて
ただ実行のし方で表示が変わってて
やっぱ環境変数のイタズラかな。
来週にでも見直そう。
Re:at がaccept, cron 実行がdeny (Was: Re:PATHなら環境変数) (スコア:1)
crontab中の「%」の扱いの違いで失敗することがありますね。
「%」より右が、「%」より左のコマンドに対する標準入力として扱われる。
dateとかprintfとかでやっちゃいがち。
Re:at がaccept, cron 実行がdeny (Was: Re:PATHなら環境変数) (スコア:1)
'' シングルクォートでも意図したことと実行されたことが違ったり
\ エスケープしてもそれがあだになったりとか。
あるなあ。落穂拾いには事欠かない。
自分自身では該当しないけど crlfとかtabという問題も別件であったりするし。
ログ (スコア:2)
/var/log/cron
にヒントがのってるかもです。
Re:ログ (スコア:1)
ログ出力を読む権限を持つ担当が
「ログが汚染された」
「ログがわけのわからない出力をだしている」
などと話が通じないケエスで隔靴掻痒に第一次大戦敗戦後
ハイパーインフレのドイツマルクで1マルク。
Re:ログ (スコア:1)
お、そっち(/var/log)見てなかった。
見てみたらエラーは吐いてなかった。
そういや、cronでエラーが出てると、親切な人が教えて(騒いで)くれるので割りと楽です。
logにはCMD実行したとしか残ってなかった、間違ったことはしてないけど、期待通りには動いてないってことらしい。
やっつけでだーっと書き込んだscriptで何も検証してないのが災いの元。
どうしても必要なファイルデータでもないのもやる気と時間が足りなくなるという災いを呼び込むタネの一つ。
cron がnobodyだからダメ?だったら sudo させれば? (スコア:1)
あるいはどこがどうダメか cron に食わせたスクリプトの一時的テスト版を
sh -x うんちゃらみたいにして
time=1とかでどこが正常終了でないかを
逐一ログに吐き出させてみれば
いつもより多めに労力使っていますというお試しcron版(すぐ消す.sh)を
吟味して動かして挙動憲章。誠実に仕事に精出すふりができるかも?