Posted at

systemdを使用しないで起動するスクリプトを作る

More than 1 year has passed since last update.


前提

CentOS7からsystemdがプロセスの実行に関わっているようで、/etc/init.dに作成した起動用スクリプトが思った通りの動きをしてくれない時の覚え書き。


今回ぶつかった壁

とある事情からyumで入れられるSamba4ではなくSamba3をソースからコンパイルした際に、起動・終了のスクリプトを作ったのに何故かsystemctlにviaしてしまって涙目に。


環境

OS
Samba

CentOS 7.2
Samba 3.6.24


やったこと

samba 3.6.24 のinstallと、自動起動

上記サイトを参考に、Samba3.6.24を起動するためのスクリプトを作成。

そして実行。

# /etc/init.d/samba start

Starting samba (via systemctl):

うーん…。なんか違う。


スクリプトをデバッグしてみる

先人が作ったものを丸コピでは進歩できないので、中身を見てみることに。

# sh -x /etc/init.d/samba start

(中略)

++ action 'Starting samba (via systemctl): ' /bin/systemctl start samba.service
++ local STRING rc
++ STRING='Starting samba (via systemctl): '
++ echo -n 'Starting samba (via systemctl): '
Starting samba (via systemctl): ++ shift
++ /bin/systemctl start samba.service

うーん…。systemctlを起動しちゃってる。

けどよく分かんない。


おとなしくググる

【CentOS7】起動スクリプトを実行すると勝手にsystemctlを使う件


\$_use_systemctl変数が”1″である場合、systemctl_redirectという関数を実行し、exitするようになっています。

(中略)このように、$SYSTEMCTL_SKIP_REDIRECT 変数が空文字であった場合、勝手にsystemctlを使ってしまうということがわかりました。


この先に答えも書いてありました。素晴らしいサイトです。


SYSTEMCTL_SKIP_REDIRECT変数を使用する

もう↑のサイトのまんまですが

# SYSTEMCTL_SKIP_REDIRECT=1 /etc/init.d/samba start

Starting SMB services: [ OK ]

キマシタワァ・゜゚・:.。..。.:・゜(n'∀')η゚・:.。..。.:・゜゚・


応用

毎回頭にSYSTEMCTL_SKIP_REDIRECT=1とつけてスクリプトを実行するのはあまり美しくないのでスクリプトの中に直接ぶっこんでみます。


/etc/init.d/samba

#!/bin/sh

SYSTEMCTL_SKIP_REDIRECT=1
SMB_HOME=/usr/local/samba
# Source function library.
if [ -f /etc/init.d/functions ] ; then

     (中略)

echo $"Usage: $0 {start|stop|restart|reload|status|condrestart}"
exit 2
esac

exit $?


これで/etc/init.d/sambaを実行してみる。

# /etc/init.d/samba stop

Shutting down SMB services: [ OK ]

うん、いい感じです。