2011年6月5日日曜日

nginx/redmineサーバの自動起動

パッケージでインストールしたnginxの自動起動の停止/削除

OSを再起動すると、パッケージでインストールしたnginxが起動してしまう。
Passengerと一緒にインストールしたnginxを起動したい。



自動で起動するデーモンの管理はrcconfというパッケージで管理できるようだ。
http://d.hatena.ne.jp/kaorumori/20080113/1200282794
http://d.hatena.ne.jp/interu/20100527/1274962900
$ suto apt-get install rcconf
インストール後に
$ sudo rcconf
で起動。

上下で選択してスペースで切り替え。tablで了解・取り消しに移動
という操作方法。

試しにnginxの※を外して了解でスペースしてみる。
update-rc.d: warning: nginx start runlevel arguments (none) do not match LSB Default-Start values (2 3 4 5)
update-rc.d: warning: nginx stop runlevel arguments (0 1 2 3 4 5 6) do not match LSB Default-Stop values (0 1 6)
Adding system startup for /etc/init.d/nginx ...
/etc/rc0.d/K00nginx -> ../init.d/nginx
/etc/rc1.d/K00nginx -> ../init.d/nginx
/etc/rc2.d/K00nginx -> ../init.d/nginx
/etc/rc3.d/K00nginx -> ../init.d/nginx
/etc/rc4.d/K00nginx -> ../init.d/nginx
/etc/rc5.d/K00nginx -> ../init.d/nginx
/etc/rc6.d/K00nginx -> ../init.d/nginx
waningが出ている。もう一度rcconfを起動。
あれ?nginxの※は外れている。設定されたのかな?
OSを再起動してみる。

localhostにアクセスしてみると自動起動していないことが分かる。
$ ps ax | grep nginx
で確認すると起動していない。

rcconfで設定しなくても、
$ sudo update-rc.d nginx disable
$ sudo update-rc.d nginx enable
でも設定できるようだ。
http://yoshimov.com/?page=Ubuntu%2F%BC%AB%C6%B0%B5%AF%C6%B0%A4%B9%A4%EB%A5%B5%A1%BC%A5%D3%A5%B9%A4%CE%CA%D1%B9%B9

一覧はどうやって見るのだろう?
Ledhatのchkconfigみたいなのは、sysv-rc-confがその役割みたい。
http://lets-ubuntu.yui.at/tips/tips_service.html
http://thirdnix.com/2010/06/27/sysv-rc-conf-%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%97%E3%81%A6%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9%E3%82%92%E8%87%AA%E5%8B%95%E8%B5%B7%E5%8B%95%E3%81%AB%E8%A8%AD/
$ sudo apt-get install sysv-rc-conf
起動は
$ sudo sysv-rc-conf
試しに、nginxをコマンドで自動起動させて確認する
$ sudo update-rc.d nginx enable
update-rc.d: warning: nginx start runlevel arguments (none) do not match LSB Default-Start values (2 3 4 5)
update-rc.d: warning: nginx stop runlevel arguments (none) do not match LSB Default-Stop values (0 1 6)
Enabling system startup links for /etc/init.d/nginx ...
Removing any system startup links for /etc/init.d/nginx ...
/etc/rc0.d/K00nginx
/etc/rc1.d/K00nginx
/etc/rc2.d/K00nginx
/etc/rc3.d/K00nginx
/etc/rc4.d/K00nginx
/etc/rc5.d/K00nginx
/etc/rc6.d/K00nginx
Adding system startup for /etc/init.d/nginx ...
/etc/rc0.d/K00nginx -> ../init.d/nginx
/etc/rc1.d/K00nginx -> ../init.d/nginx
/etc/rc6.d/K00nginx -> ../init.d/nginx
/etc/rc2.d/S100nginx -> ../init.d/nginx
/etc/rc3.d/S100nginx -> ../init.d/nginx
/etc/rc4.d/S100nginx -> ../init.d/nginx
/etc/rc5.d/S100nginx -> ../init.d/nginx
warningが出ているけど、追加されたのかな。
$ sudo sysv-rc-conf
niginxの項目をみてもチェックが入っていない。
rcconfで見てみる
$ rcconf
...さっきまであったnginxの項目がrcconfではなくなっているじゃないか。。。
うーん。

/etc/init.dの中にファイルがあるか確認
$ ls /etc/init.d/ | grep nginx
nginx
削除されていないよな。

Ubuntu10.4を使っているのだけれど、変わった事があるのかな。
ランレベルは3(マルチユーザCUI)と5(マルチユーザGUI)の時に起動させたい。(本当は起動させたくないんだけどテストのため)
sysv-rc-confで設定してみる。
$ sudo sysv-rc-conf
nginxの3の箇所でスペースを押してみる。
あれ?sysv-rc-confが終了してしまった。
うーん。

sysv-rc-confにlistオプションがあるので、それで確認
$ sysv-rc-conf -list
niginxは、0,1,6がoffになっている。

sysv-rc-confで追加してみる。
$ sudo sysv-rc-conf nginx on
Priority isn't two numbers: 100 at /usr/sbin/sysv-rc-conf line 148.
優先順位は2桁じゃないと駄目なのかな。
/etc/init.d/nginxを見てみる
うーん。優先順位はどこかに書いてあるのかな?

そういえば、
$ sudo update-rc.d nginx enable
を実行したときに、
Removing any system startup links for /etc/init.d/nginx ...
/etc/rc0.d/K00nginx
/etc/rc1.d/K00nginx
/etc/rc2.d/K00nginx
/etc/rc3.d/K00nginx
/etc/rc4.d/K00nginx
/etc/rc5.d/K00nginx
/etc/rc6.d/K00nginx
Adding system startup for /etc/init.d/nginx ...
/etc/rc0.d/K00nginx -> ../init.d/nginx
/etc/rc1.d/K00nginx -> ../init.d/nginx
/etc/rc6.d/K00nginx -> ../init.d/nginx
/etc/rc2.d/S100nginx -> ../init.d/nginx
/etc/rc3.d/S100nginx -> ../init.d/nginx
/etc/rc4.d/S100nginx -> ../init.d/nginx
/etc/rc5.d/S100nginx -> ../init.d/nginx
とメッセージが出ていた。この100とかがそうなのかな。

/etc/rc5.d 以下を見ると、S99...はあるけど、S100はnginxだけだ。
名前を変えてみる。
[~]$ sudo mv /etc/rc5.d/S100nginx S99nginx
[~]$ sudo sysv-rc-conf --level 5 nginx on
Priority isn't two numbers: 100 at /usr/sbin/sysv-rc-conf line 148.
うーん。駄目だ。

あっ、間違えた。変な箇所に移動してしまった。
[~]$ sudo mv S99nginx /etc/rc5.d/
[~]$ sudo sysv-rc-conf --level 5 nginx on
Priority isn't two numbers: 100 at /usr/sbin/sysv-rc-conf line 148.
うーん。
$ ls /etc/rc5.d/ | grep nginx
あれ?どこいった? 無くなった。。。まずかったかな。
/etc/init.d/nginxのシンボリックなので作る。
$ sudo ln -s /etc/init.d/nginx /etc/rc5.d/S99nginx
$ sudo sysv-rc-conf --level 5 nginx on
Priority isn't two numbers: 100 at /usr/sbin/sysv-rc-conf line 148.
だめ。

いきなり99に指定するのではなくて、元に戻してみよう。
[~]$ sudo ln -s /etc/init.d/nginx /etc/rc2.d/K00nginx
[~]$ sudo ln -s /etc/init.d/nginx /etc/rc3.d/K00nginx
[~]$ sudo ln -s /etc/init.d/nginx /etc/rc4.d/K00nginx
[~]$ sudo ln -s /etc/init.d/nginx /etc/rc5.d/K00nginx
$ sudo find /etc/rc* -name S100*
でS100nginxを検索して削除
$ sudo sysv-rc-conf nginx on
Priority isn't two numbers: 100 at /usr/sbin/sysv-rc-conf line 148.
だめ。

一度
$ sudo update-rc.d nginx disable
$ sudo update-rc.d nginx enable
してみる。
update-rc.d: warning: nginx start runlevel arguments (none) do not match LSB Default-Start values (2 3 4 5)
update-rc.d: warning: nginx stop runlevel arguments (none) do not match LSB Default-Stop values (0 1 6)

このwarningは指定の仕方が間違っているんじゃないかな?
$ less /etc/init.d/nginx
### BEGIN INIT INFO
# Provides:          nginx
# Required-Start:    $local_fs $remote_fs $network $syslog
# Required-Stop:     $local_fs $remote_fs $network $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: starts the nginx web server
# Description:       starts nginx using start-stop-daemon
### END INIT INFO
$ less /etc/init.d/sudo
### BEGIN INIT INFO
# Provides:          sudo
# Required-Start:    $local_fs $remote_fs
# Required-Stop:
# X-Start-Before:    rmnologin
# Default-Start:     2 3 4 5
# Default-Stop:
### END INIT INFO
$ less /etc/init.d/rsync
### BEGIN INIT INFO
# Provides:          rsyncd
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Should-Start:      $named
# Default-Start:     2 3 4 5
# Default-Stop:
# Short-Description: fast remote file copy program daemon
# Description:       rsync is a program that allows files to be copied to and
#                    from remote machines in much the same way as rcp.
#                   
これを見ると、Default-Startは同じだけど、Defailt-Stopがnginxには書いてあるけど、sudo,rsyncには書いてない。修正して実行
$ sudo update-rc.d nginx
update-rc.d: warning: nginx start runlevel arguments (none) do not match LSB Default-Start values (2 3 4 5)
Enabling system startup links for /etc/init.d/nginx ...
エラーは減ったけど、Default-Startで出ているから駄目。
参ったね。
パッケージでインストールしたnginxは削除するつもりだからいいたらいいんだけど。

-----
[追記]
$ sudo update-rc.d nginx enable
ではなく、最初は、
$ sudo update-rc.d nginx defaults
と実行すると良いかもしれない
-----

ということで削除。
$ sudo apt-get remove nginx
$ which nginx
削除された。
$ ls /etc/init.d/ | grep nginx
nginx
のこってる。。。削除。

ゴミのシンボリックリンクも削除
$ sudo find /etc/rc* -name S100*
/etc/rc3.d/S100nginx
/etc/rc4.d/S100nginx
/etc/rc5.d/S100nginx
[~]$ sudo rm /etc/rc3.d/S100nginx
[~]$ sudo rm /etc/rc4.d/S100nginx
[~]$ sudo rm /etc/rc5.d/S100nginx
$ sudo find /etc/rc* -name K00*
/etc/rc0.d/K00nginx
/etc/rc1.d/K00nginx
/etc/rc6.d/K00nginx
[~]$ sudo rm -rf /etc/rc0.d/K00nginx
[~]$ sudo rm -rf /etc/rc1.d/K00nginx
[~]$ sudo rm -rf /etc/rc6.d/K00nginx 
Passengerでインストールしたnginxを自動起動させる

rvm/nginx/passengerなど環境構築について、ここにやりたいことが書いてあった。。。
http://yuya-lush.tumblr.com/post/1430647177/ubuntu10-10-rails3
$ cd
$ git clone git://github.com/jnstq/rails-nginx-passenger-ubuntu.git
$ sudo mv rails-nginx-passenger-ubuntu/nginx/nginx /etc/init.d/nginx
$ sudo chown root:root /etc/init.d/nginx
これだけで自動起動するのかな?
一度reboot

起動後に
$ ps ax | grep nginx
2142 pts/0    S+     0:00 grep --color=auto nginx
動いていない。
$ sudo update-rc.d nginx enable
update-rc.d: warning: nginx start runlevel arguments (none) do not match LSB Default-Start values (2 3 4 5)
update-rc.d: warning: nginx stop runlevel arguments (none) do not match LSB Default-Stop values (0 1 6)
System start/stop links for /etc/init.d/nginx do not exist.
あれ?駄目だ。

下記にあるように、defaultsで初期登録をする必要があるのかも。
http://yoshimov.com/?page=Ubuntu%2F%BC%AB%C6%B0%B5%AF%C6%B0%A4%B9%A4%EB%A5%B5%A1%BC%A5%D3%A5%B9%A4%CE%CA%D1%B9%B9
$ sudo update-rc.d nginx defaults
Adding system startup for /etc/init.d/nginx ...
/etc/rc0.d/K20nginx -> ../init.d/nginx
/etc/rc1.d/K20nginx -> ../init.d/nginx
/etc/rc6.d/K20nginx -> ../init.d/nginx
/etc/rc2.d/S20nginx -> ../init.d/nginx
/etc/rc3.d/S20nginx -> ../init.d/nginx
/etc/rc4.d/S20nginx -> ../init.d/nginx
/etc/rc5.d/S20nginx -> ../init.d/nginx
$ sudo sysv-rc-conf -list
を実行すると、2-5までがonになった。

一度disableしてみる。
$ sudo update-rc.d nginx disable
$ sudo sysv-rc-conf -list
nginxはすべてoffになった。

enable
$ sudo update-rc.d nginx enable
update-rc.d: warning: nginx start runlevel arguments (none) do not match LSB Default-Start values (2 3 4 5)
update-rc.d: warning: nginx stop runlevel arguments (none) do not match LSB Default-Stop values (0 1 6)
$ sudo sysv-rc-conf -list
warningは表示されたけど、2-5までがonになった。もしかしたら、
パッケージでインストールされたngninxの自動起動もdefaultsを最初につければうまくいったかもしれない。。。

rebootして確認。
$ ps ax | grep nginx
947 ?        Ss     0:00 nginx: master process /opt/nginx/sbin/nginx
950 ?        S      0:00 nginx: worker process
2072 pts/0    S+     0:00 grep --color=auto nginx
localhostにアクセスして確認

動いている。
無事に自動起動完了。

script/serverでのRedmineの自動起動
rvm+Passengerはどうやら1つのRubyでしか動かせないみたい。
だからredmineはscript/serverで起動させるようにする。

まずは、通常の起動させてみる。
$ cd /var/www/redmine-1.2.0/
$ script/server -e production
起動する。このコマンドが入力できればよい。

redmine-1.2.0に移動したときに、rvmで環境を切り替えてその後コマンドを実行する必要がある。
シェルから移動した時はrvmは変わるのだろうか?
書いてみる。
$ cd ~/Desktop
$ vi redmine-start.sh
#! /bin/bash
cd /var/www/redmine-1.2.0
echo "ok"
echo `pwd`
echo `which ruby
$ chmod u+x redmine-start.sh
$ ./redmine-start.sh
ok
/var/www/redmine-1.2.0
やっぱりrubyの環境は変わらないか。
rvmでrubyのパスとかgemのパスを指定している方法で、シェルから実行すれば良いのかな。
.bashrcに書いたrvmの読み込みを追加してみよう。

$ vi redmine-start.sh
#! /bin/bash
[[ -s "/home/k10i/.rvm/scripts/rvm" ]] && source "/home/k10i/.rvm/scripts/rvm"
cd /var/www/redmine-1.2.0
echo "ok"
echo `pwd`
echo `which ruby`
$ ./redmine-start.sh
Using /home/k10i/.rvm/gems/ruby-1.8.7-p334 with gemset redmine
ok
/var/www/redmine-1.2.0
/home/k10i/.rvm/rubies/ruby-1.8.7-p334/bin/ruby
おっ、変わった!
これでサーバ起動も追加してみる。
起動した!
ポートも変えたいので最終的なファイルは、
#! /bin/bash
[[ -s "/home/k10i/.rvm/scripts/rvm" ]] && source "/home/k10i/.rvm/scripts/rvm"
cd /var/www/redmine-1.2.0
script/server -e production -p 5000
起動させるコマンドは、
$ nohup ./redmine-start.sh 1 > /dev/null 2>&1 &
出力は/dev/nullに渡す。(ログはlogs/production.logで見れる)
http://x68000.q-e-d.net/~68user/unix/pickup?%A5%EA%A5%C0%A5%A4%A5%EC%A5%AF%A5%C8

nohupで、起動させるコマンドをログイン時に実行すれば良い。
個人的な起動スクリプトはどこに書くのだろう。

システム->設定->自動起動するアプリケーション
に追加できそう。
名前はredmine
コマンドは、
nohup /home/k10i/script/redmine-start.sh 1 > /dev/null 2>&1 &
説明はredmineの起動
としておく。

ファイルを移動させる
[~]$ cd .
[~]$ mkdir script
[~]$ cp Desktop/redmine-start.sh script
ログアウトして確認する。
あっ、nohupで書いたから、ログアウトしても終わらなくて、ログイン・ログアウトを繰り返すと、
5000番ポートが使われているから2回目以降はエラーが出るのかな?
redmineをnohupで起動していたら終了させてからテストする。

サーバを終了させたい場合は、
$ ps ax | grep ruby
$ ps ax | grep ruby
4487 pts/1    S      0:20 ruby script/server -e production -p 5000
4603 pts/1    R+     0:00 grep --color=auto ruby
$ kill -KILL 4487

ログアウトしてログイン。
$ ps ax | grep ruby
5783 ?        R      0:05 ruby script/server -e production -p 5000
5915 pts/0    S+     0:00 grep --color=auto ruby
起動している!
サイトにアクセスしても見れる。

このpidを覚えておいて、redmineは終了しないで、ログアウト/ログインをしてみる。

再度ログイン後に確認
$ ps ax | grep ruby
5783 ?        S      0:20 ruby script/server -e production -p 5000
6455 ?        R      0:13 ruby script/server -e production -p 5000
6565 pts/0    S+     0:00 grep --color=auto ruby
やっぱり、2つ起動している。しかも後からのはポートの重複のエラーで起動していないはず。
ログを見るために、自動起動コマンドから/dev/nullへの出力を 1 > /home/k10i/nohup.out 2>&1 に変更。
killコマンドで2つのscript/serverを終了させる。
$ kill -KILL 5783
$ kill -KILL 6445
bash: kill: (6445) - そのようなプロセスはありません
あれ?2回目のログインのときに起動していたのは終了している。
エラーが出たから終わったのかな?
ログを見たいからログアウト/ログイン
$ ps ax | grep ruby
8075 ?        R      0:13 ruby script/server -e production -p 5000
7424 pts/0    S+     0:00 grep --color=auto ruby
起動している。

あれ?ログが出てない。
作っておかないと駄目なのかな?
$ touch nohup.out
$ chmod 777 nohup.out
redmineは終了させないでログアウト/ログイン
ps ax | grep ruby
8075 ?        S      0:19 ruby script/server -e production -p 5000
8616 ?        R      0:08 ruby script/server -e production -p 5000
8759 pts/0    D+     0:00 grep --color=auto ruby
2つ起動している。(2つ目はエラー。)
$ less nohup.out
何も書かれていない。うーむ。どこにいってしまったのだろう。

少し時間をおいて2つ起動しているか確認。
$ ps ax | grep ruby
8075 ?        S      0:19 ruby script/server -e production -p 5000
8826 pts/0    S+     0:00 grep --color=auto ruby
おっ、エラーの方はプロセスが終了している。
これはこれで良としようかな。

本当は、起動しているかどうかチェックして起動させるか、
init.dに作った方が良いのかもしれないけど。

起動していないエラーログは見れなかったけど、/dev/nullに戻しておく。
普通のアクセスログは
$ tail -f /var/www/redmine-1.2.0/log/production.log
で確認できるので良としようかな。

今日の課題は終了。

0 件のコメント:

コメントを投稿