尋常でないもふもふ

a software engineer blog

Debian系とRedHat系の起動スクリプト

/etc/init.d/nginx start というか、利用するときは service nginx start を叩くけど、こういう起動スクリプトミドルウェアの起動によく使います。 訳あって自社サービス用の起動スクリプトUbuntu 版から CentOS 版へと移行したので、作業にあたって必要になった知識をメモ。

Ubuntu CentOS
起動スクリプト用の関数 /lib/lsb/init-functions /etc/init.d/functions
テンプレート /etc/init.d/skeleton /usr/share/doc/initscripts-9.03.40/sysvinitfiles

Ubuntu

CentOS

  • 固有知識
    • status で状態(起動中か否か/PIDの有無/lockファイルの有無)を確認
    • daemon で起動
      • background オプションはないため nohup command & しないとダメ
    • killproc で終了
    • pid ファイルは daemon が自動生成してくれるわけではないデーモン化するプログラム側で作成が必要
    • pid ファイルはデフォルトでは /var/run/ 配下をみる
    • lock ファイル必要なときは自分で touch と rm 使って生成と削除をする
    • lock ファイルは /var/lock/subsys/ 配下に配置される
  • 参考リンク

シェルスクリプト

  • 変数は可読性を考慮して $PIDFILE ではなく ${PIDFILE} と必ず書く
  • if 文で使う test コマンドと [] は同じ意味、可読性的に後者を使う
  • if [ $? == 0 ]if [[ $? == 0 ]] は扱いが異なるらしい
  • rm -- -txtのようにコマンドにハイフン2つ繋げるのは引数を無効化したいとき