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 をサンプルで紹介。mysql はDebian独自設定が多いんだ・・
設定ファイルのポイント
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 をちゃんと設定しても良いんですが面倒ですよね。