periodicで実行するシェルスクリプトは単一の目的のものにする

man periodicで見ればわかるんですが、periodicから実行されたシェルスクリプトの戻り値は0と1と2が推薦(または規定の値として)しかありません。(厳密には後ひとつありますが)
で、ここで何が問題になってくるかというとベースとなる(初期配置されている)シェルスクリプトは例外処理があまりされていません。

これはどういうことかというと、例えばネットワーク内にcvsup-mirrorを設置している状況で、csupとportsnapを切り替えて使いたいなんて事があったとします。(例えが無茶苦茶ですが)まず通常ならcsupとportsnapの実行権限があるかどうかチェックし、設定ファイルの有無やsupfileの有無をチェックします。
ここからようやく実行段階に入り、その結果を標準出力かログファイルかに残すことになると思います。
ここでperiodic.confから動的に変更するように条件分岐をしていくとrc(exit値を保持する変数)の結果が破綻します。
実際にシェルスクリプトを書いてもらえればわかると思うのですが、特にcaseとifを混ぜたりすると、とても気持ちの悪いシェルスクリプトになります。
例えばrcを保持する為だけにifしていっていつのまにかネストで( ゚Д゚)・・・な状況になったり等々


単純にexit 1とかexit 2とすれば話は早いのですが、そういう実装をしているperiodicが見当たらない(あったら教えてください)ので、郷に入れば郷に従え、という訳ではありませんが、どちらにせよ気持ちの悪いシェルスクリプトになってしまいます。
今現在これに対する解は複雑なシェルスクリプトを作るくらいだったら分割する事なのかなぁとか思ったりしたのですが、大抵の場合において、自動化する作業なんていうのはいろいろと連携します。(cvsup-mirror→csup→index生成→更新通知→各ホストの自動化処理)


そもそもシェルスクリプト自体がそんなに複雑な処理をさせる事に目的を置いてなくて、あくまでも「小人」な役割とする事を目的としているのかもしれません。
あくまでFreeBSDでの話ですが、デーモン君に倣って自動化する場合は結局の所、periodicでは「小人」的なシェルスクリプトを量産していく方が後々の管理が楽になりますよ、という結論になりました。(自分の中では。)
しかし、Linuxや他のOSで似たような機能を搭載しているが(periodicもcronから呼ばれているだけなので、本質的にはどちらも一緒かもしれませんが)、また違った結果になのかもしれない、という所で今回は閉めたいと思います。