#前提
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
とつけてスクリプトを実行するのはあまり美しくないのでスクリプトの中に直接ぶっこんでみます。
#!/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 ]
うん、いい感じです。