LoginSignup
2
3

More than 5 years have passed since last update.

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

Posted at

前提

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  ]

うん、いい感じです。

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3