Memo/Linux/InitScript

https://dexlab.net:443/pukiwiki/index.php?Memo/Linux/InitScript
 

Init Script

  • RHEL/CentOS 6まではinitdを使用している。
  • RHEL/CentOS 7以上はinitdから Memo/Linux/systemd に変わったので、systemdのUnitファイルを書く方が簡単。

プロセスのデーモン化

  • RedHat?/CentOS
    • /etc/init.d/functions に定義している関数「daemon」「killproc」「status」が肝心
    • CentOS6: ドキュメント
      less /usr/share/doc/initscripts-9.03.31/sysvinitfiles
  • daemon関数
    • pid fileはプロセス自身が作り、面倒を見る。
  • 「nohup command &」 はHUPシグナルを無視するだけ。
    • SIGHUP: 制御端末の終了を伝えるシグナル。

chkconfig対応スクリプトの作成


ulimitやプロセスの標準エラーをログに出力

  • fileinit-example.20181025.zip
  • 本体: 「node hello.js」で起動するだけ
  • ログ: /var/log/init-example.log
    • nodeの標準出力、標準エラーがログに残る
    • 本来はlogroateは必ず足す事
  • sysconfig: /etc/sysconfig/init-example
    • umask_opts: 077: 作成されるfile権限が0600(安全), 022: fileが0644
    • ulimit_opts: ulimitでmax open file/max process等の変更可能
  1. /opt/init-example/にhello.jsを入れる
    # node.jsのインストール
    sudo yum install nodejs --enablerepo=epel
    
    which node
    /bin/node
    
    node -v
    v6.14.3
    
    # userとhomeの作成
    sudo useradd -m -d /opt/init-example init-example
    sudo su - init-example
    # /opt/init-example/hello.js にファイルを置く
  2. initスクリプトを配置する
    # /etc/rc.d/init.d/init-example に配置
    sudo chmod +x /etc/rc.d/init.d/init-example
    sudo chkconfig --add init-example
    
    # ホスト再起動後も自動起動させる場合
    sudo chkconfig init-example on
    sudo chkconfig --list init-example
  3. 起動
    sudo service init-example start
    
    # 確認
    pgrep node
    4838
    
    tail -f /var/log/init-example.log
    Server running at http://127.0.0.1:3000/
    
    curl http://localhost:3000/
    Hello World
  4. 終了
    sudo service init-example stop

サンプル1

  • fileexample.chkconfig
    mv example /etc/rc.d/init.d/
    chmod 755 /etc/rc.d/init.d/example
    chown root:root /etc/rc.d/init.d/example
    chkconfig --add example
    chkconfig example on
    service example restart
  • /etc/rc.d/init.d/functions か肝心なので軽く読んでみると良い
    . /etc/rc.d/init.d/functions
  • cat > test.sh << 'EOS'
    #!/bin/bash
    
    . /etc/rc.d/init.d/functions
    
    echo "success" && echo_success
    echo "failure" && echo_failure
    echo "passed" && echo_passed
    echo "warning" && echo_warning
    EOS
    
    LANG=C bash test.sh
    success                                                    [  OK  ]
    failure                                                    [FAILED]
    passed                                                     [PASSED]
    warning                                                    [WARNING]

添付ファイル: fileinit-example.20181025.zip 19件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2018-10-25 (木) 18:22:21 (22d)