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/nginxwaningが出ている。もう一度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/nginxwarningが出ているけど、追加されたのかな。
$ sudo sysv-rc-confniginxの項目をみてもチェックが入っていない。
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-confnginxの3の箇所でスペースを押してみる。
あれ?sysv-rc-confが終了してしまった。
うーん。
sysv-rc-confにlistオプションがあるので、それで確認
$ sysv-rc-conf -listniginxは、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/K00nginxPassengerでインストールした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 -listnginxはすべて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 -listwarningは表示されたけど、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 nginxlocalhostにアクセスして確認
動いている。
無事に自動起動完了。
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.outredmineは終了させないでログアウト/ログイン
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 ruby2つ起動している。(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 件のコメント:
コメントを投稿