それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

UpStartに移行すると何が変わるのか

UpStartになってイロイロ変わりました。どの辺が変わったのか。調べて纏めました

/etc/init.d から無くなります。

/etc/init.d/mysqlファイルは無くなりました。

Upstart 以前

-rwxrwxrwx 1 root root    21 2011-05-06 02:35 mysql 

UpStart 以降

lrwxrwxrwx 1 root root    21 2011-05-06 02:35 mysql -> /lib/init/upstart-job #リンクに


UpStartになると、 /etc/init.d/XXX のスクリプトは、 /lib/init/upstart-job に書き換わっていました。

/etc/init.d/mysql はドコに移動したのか

/etc/init.d/ →/etc/initに移動しました*1

Upstart 以前 /etc/init.d/mysql
Upstart 以降 /etc/init/mysql.conf*2


**ubuntuとfedra で若干違う。

upstartで追加されるコマンド

Upstartになると /sbin に次のコマンドが追加されます。

status
状態表示
start
起動
stop
停止
restart
再起動

がコマンド登録される

takuya@atom:~$ sudo stop smbd          #stop 例
smbd stop/waiting
takuya@atom:~$ sudo start smbd         #start 例
smbd start/running, process 9513
takuya@atom:~$ sudo reload smbd        #reload 例
takuya@atom:~$ sudo restart smbd
smbd start/running, process 9525       #restart 例(PIDが変わってるよね)


restart コマンドは reboot コマンドと間違いそうで怖いぉ。

upstart で管理されている一覧

upstart で管理されている一覧は、initctl コマンドで見ることができます

コマンド例

Mysqlが登録されているか調べてみました)

takuya@attn02:~$ sudo initctl list | grep mysql
mysql start/running, process 1274

initctl は根本ツールらしい

initctl は /etc/init.d/ の代替コマンドの全ての基本になるツールのようです。
{start,reload,stop,restart,status} のコマンドは全て initctl に紐づけられていました。

takuya@atom:~$ ls -l /sbin/{start,reload,stop,restart,status}
lrwxrwxrwx 1 root root 7 2011-05-06 02:11 /sbin/reload -> initctl
lrwxrwxrwx 1 root root 7 2011-05-06 02:11 /sbin/restart -> initctl
lrwxrwxrwx 1 root root 7 2011-05-06 02:11 /sbin/start -> initctl
lrwxrwxrwx 1 root root 7 2011-05-06 02:11 /sbin/status -> initctl
lrwxrwxrwx 1 root root 7 2011-05-06 02:11 /sbin/stop -> initctl
initctl の使い方

では initctl はどんなものか見てみます。

takuya@atom:~$ sudo initctl help
ジョブ commands:
  start                       Start job.
  stop                        Stop job.
  restart                     Restart job.
  reload                      Send HUP signal to job.
  status                      Query status of job.
  list                        List known jobs.

イベント commands:
  emit                        Emit an event.

Other commands:
  reload-configuration        Reload the configuration of the init daemon.
  version                     Request the version of the init daemon.
  log-priority                Change the minimum priority of log messages from the init daemon
  show-config                 Show emits, start on and stop on details for job configurations.
  check-config                Check for unreachable jobs/event conditions.
  help                        display list of commands

initctl も start も同じ

ここまでをふまえて、次の3コマンドは同じ意味になるようです。

・ start mysql
・ initctl start mysql
・ /etc/init.d/mysql start

以上は同じです。

init.d を使っていた私は

/etc/init.d/mysql が  initctl mysql に変わった

と脳内置換で覚えることにしました。

起動スクリプトの書き方は変わったの?

/etc/init.d/ の起動スクリプトはそのまま使えません。

起動スクリプトの書き方が変わりました。

Upstart 以前 シェルスクリプト #/bin/sh が基本
Upstart 以降 UpStart 用DSL (専用コマンド+シェルスクリプトを記述する感じ)

SSHdの起動設定ファイルの場合

SSHd の場合の起動設定は次のような感じになっている。
/etc/init/以下のファイルをいくつか眺めれば感覚はつかめると思う

  1 # ssh - OpenBSD Secure Shell server
  2 #
  3 # The OpenSSH server provides secure shell access to the system.
  4
  5 description "OpenSSH server"
  6
  7 start on filesystem or runlevel [2345]
  8 stop on runlevel [!2345]
  9
 10 respawn
 11 respawn limit 10 5
 12 umask 022
 13
 14 pre-start script
 15     test -x /usr/sbin/sshd || { stop; exit 0; }
 16     test -e /etc/ssh/sshd_not_to_be_run && { stop; exit 0; }
 17     test -c /dev/null || { stop; exit 0; }
 18
 19     mkdir -p -m0755 /var/run/sshd
 20 end script
 21
 22 # if you used to set SSHD_OPTS in /etc/default/ssh, you can change the
 23 # 'exec' line here instead
 24 exec /usr/sbin/sshd -D

Samba の smbd 起動設定の場合

  1 description "SMB/CIFS File Server"
  2 author      "Steve Langasek <steve.langasek@ubuntu.com>"
  3
  4 start on (local-filesystems and net-device-up)
  5 stop on runlevel [!2345]
  6
  7 respawn
  8
  9 pre-start script
 10     RUN_MODE="daemons"
 11
 12     [ -r /etc/default/samba ] && . /etc/default/samba
 13
 14     [ "$RUN_MODE" = inetd ] && { stop; exit 0; }
 15
 16     install -o root -g root -m 755 -d /var/run/samba
 17 end script
 18
 19 exec smbd -F

mysqlは一目でわかりにくかった。なのでSSHD/smbd をサンプルで紹介。mysqlDebian独自設定が多いんだ・・

設定ファイルのポイント

UpStartは、init.dの名前順の起動ではなく,イベント時に起動するようになっている。
イベントは自由登録制で

starton XXX

と記述して登録する。実際に以下のように使われている

  7 start on filesystem or runlevel [2345]         #sshd
  4 start on (local-filesystems and net-device-up) #samba 

イベントとランレベル管理が以前と変わったのでUpStart知らないと追いかけられない。
以前はファイルとディレクトリ見れば大体分かったんだけどね。

最後に upstart の警告を消す方法

以前のように /etc/init.d/mysql start を叩くと

Since the script you are attempting to invoke has been converted to an
Upstart job, you may also use the start(8) utility, e.g. start mysq

Upstartに変わったから /etc/init.d 使わないでね。って出てきます。

これめんどくさいので、消したいと思います。このメッセージはシェルスクリプトで書かれていて。
チョッと変えれば簡単に消すことができます。

 31
 32 if [ -z "$DPKG_MAINTSCRIPT_PACKAGE" ]; then
 33     #ECHO=echo    # echo  コマンドをコメントアウト
 34     ECHO=:        # echoコマンドの代わりに何もしない感じにする・
 35 else
 36     ECHO=:
 37 fi

これだけです。$DPKG_MAINTSCRIPT_PACKAGE をちゃんと設定しても良いんですが面倒ですよね。

upstart って

便利になったはずなんだけど。ファイルとフォルダ見てれば大体分かったのに比べると大分不便。
CentOS/Fedoraな人は chkconfg してるから違和感ないのだろうけど。


upstart で語順が変わることが重要なんだろう。と憶測

/etc/init.d/mysql start # 日本語的な語順
initctl start mysql     # 英語的なSVO語順

米国人には, mysql start と日本語的な語順が相当な違和感だったんだなと思うわけです。

*1:Ubuntuの場合

*2:.conf がつくのはUbuntuだけらしい。手元にFedoraないから分らない。