目次

06 CentOS7 systemctlでCASのramdisk起動スクリプト

initscriptsでは/etc/rc.d/rc.localにコマンドを書いておけばOSの起動時に実行してくれますが、systemdでは下記のようにする。

/etc/systemd/system/にサービスファイル作成

/etc/systemd/system/ramdisk.service

 
[Unit]
Description=Open Cache Acceleration Software(Open Cas ramdisk)
After=network.target

[Service]
Type=simple
RemainAfterExit=yes
ExecStart=/bin/ramdisk -a
ExecStop=/bin/ramdisk -d

[Install]
WantedBy=multi-user.target

起動シェル

/bin/ramdisk

#!/bin/sh

OPTION=$1

if [ "$OPTION" == "-a" ]; then
  modprobe brd rd_size=10240000
  casadm -S -i 1 -d /dev/ram1 -c wb
  casadm -A -i 1 -d /dev/vdb
  mount -o nobarrier /dev/cas1-1 /home/
elif [ "$OPTION" == "-d" ]; then
  umount /home
  casadm -R -i 1 -j 1
  casadm -T -i 1
  modprobe -r brd
else
  echo "argments error."
  exit
fi

exit

デーモンファイルをリロード

# systemctl daemon-reload

自動起動

# systemctl enable vpnclient

Service タイプのオプション

Type

Type=simple指定コマンドがフォアグラウンドで実行を継続する場合。コマンドを実行したらすぐに起動完了と判定
Type=forking子プロセスをバックグラウンドで起動して、最初のコマンドをは終了する場合。
最初のコマンドが終了したタイミングを起動完了と判断
Type=oneshot一度だけコマンドを実行するタイプのサービスの場合。コマンドが終了したら起動完了と判定して、サービスも終了したものと認識。
(RemainAfterExit=yesを指定すると、コマンド終了後もサービスは起動したままと認識。)
Type=notifysystemdのライブラリ関数「sd_notify()」を使用する場合。プロセスのプログラム内部で、sd_notify()関数で起動完了を通知するように作られている必要が有ります。
Type=dbusD-Bus(プロセス間通信用メッセージバス)を利用するサービスの場合。BusNameで指定した接続名がD-BUsに登録されると、サービス起動完了と判定