2014年12月20日土曜日

CentOS7で起動時にプログラムを実行する(rc.localからの置き換え)

2015/03/31 少しだけ補強しました。
-----

CentOS6のマシンで起動時にプログラムを実行するよう、rc.localに登録していましたが、CentOS7からsystemdに置き換わったため、さてどうやれば良いのかと調べました。

手法は2つあります。
  1. rc.localを使い続ける
  2. systemdのやり方に置き換える
/etc/rc.d/rc.localをcatすると、こんなコメントが記載されています。

#!/bin/bash
# THIS FILE IS ADDED FOR COMPATIBILITY PURPOSES
#
# It is highly advisable to create own systemd services or udev rules
# to run scripts during boot instead of using this file.
#
# In constrast to previous versions due to parallel execution during boot 
# this script will NOT be run after all other services.
#  
# Please note that you must run 'chmod +x /etc/rc.d/rc.local' to ensure
# that this script will be executed during boot.

rc.localをそのまま使うのであれば、rc.localに実行権限をつけるとブート時に実行されますよということですね。おすすめは、自分でsystemdのサービスとして定義してあげましょうという内容です。

1. /etc/systemd/systemの下に、拡張子が .serviceのテキストファイルを作る。(nantoka.serviceのような)

中身はこんなかんじです:
[Unit]
Type=simple ←プロセスの起動タイプ。
Description=nantoka shell   ←サービスの説明。
After=postgresql.service ←自分が起動する前に起動しててほしいサービスを書く。network.targetなど

[Service]
ExecStart=/bin/bash /nantoka.sh ←実行したいプログラム

[Install]
WantedBy=multi-user.target ←どのターゲットで動かすか(マルチユーザー)
nantoka.shは、起動したら常駐するようなタイプのシェルを想定しています。

2. systemdをリロードして変更を適用する
# systemctl reload-daemon

3. OS起動時に自動起動する
# systemctl enable nantoka.service

4. サービスを開始する
# systemctl start nantoka.service

ユニット設定のサンプルはこちら

0 件のコメント:

コメントを投稿