linuxでサービス起動に関する質問です。
あるサービス "hoge" を rootでログインして
# ./hoge -option1 -option2
と打って起動しています。
(このサービスは 起動すると、コンソールにサービスの状態を
適宜オートで表示スクロールするような仕様です。)
現状は リモートでログインしているので、リモートのコンソールを閉じると
rootはログアウトされ、サービスも終了してしまいます。
・ 質問 1:
linuxを起動するだけで自動でサービスを稼動させるには
どうしたら良いのでしょうか・・・。
・ 質問 2:
オートで起動できた場合、そのサービスを終了させるには
どうしたら可能ですか?
実際に解決できた場合、ポイントを 500pt差し上げます・・・
どうかよろしくお願いいたします・・・
1) /where/is/hoge -opt1 -opt2 % > /tmp/logfile
な起動スクリプトを適当な場所に仕込んでおく
2)ps -Af |grep hoge
kill PID
参考
http://www.atmarkit.co.jp/flinux/rensai/theory11/theory11a.html
コレをすると前の回答のようなスクリプトを書く必要はないのですか?
オプション付きでも平気ですか?
さらにてとりあしとり願いますw
お使いのLinuxディストリビューションの作法によりますが、
/etc/rc?.d/とか/etc/init.d/の下に起動時に動かすデーモンの
設定方法が書いてあります。参考にするとよいでしょう。
止めかたも、そのプログラムの作法によりますが kill シグナルを
送ったり、起動したプログラムのオプションで止める方法も指定できたりとさまざまです。
なお、rootでデーモンを動かしていると乗っ取りをされたときにサーバが乗っ取られてしまうので可能ならroot以外の権限で動かないか、プログラムを作られた方に確認してみてはいかがですか?
うーん、どちらにも実行ファイルしか無かったです。
ちなみにVine3です。
おっしゃるとおりですね、root権限の変更は今後検討します。
distributionによっていくつかやりかたがあります。
まずdebian系の場合、start-stop-daemonというコマンドを使って、/etc/init.d/以下にURLで示したような手順でスクリプトを書くのが正しいやりかたです。
http://www.si-linux.co.jp/wiki/cat/index.php?%BC%AB%BA%EE%A5%A2%...
RedHat系の場合は同じような感じですが、
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=13852&am...
のような書き方をします。
その後にchkconfig --level 35 hogehoge(スクリプト名) on で起動されるように登録します。
スクリプトですが、/etc/init.d以下には他のスクリプトファイルがすでにいくつも入っているのでそれをコピーして書き直すのが早いでしょう。
停止する場合はそれぞれそのスクリプトを使って
/etc/init.d/hogehoge stop のように実行することで、保存されたプロセスIDを元にkillしてくれるので楽です。(2の答えですが、「起動したときにプロセスIDをどこかにしまっておいて、後でそれを参照してkillするなりなんなりする」ですね)
すみません、開いただけで返信しないで力尽きてしまいました。
スクリプトをパクリパクリ作ってみたんですがまともに動きません。
もうへろへろですorz
Vine 3.xとのことなのでRedHat系のやりかたでよいと思います。
なので/etc/init.d/以下に置くスクリプトは、例えば
#! /bin/sh
#
# hoge
#
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/usr/local/bin/hoge (ここはhogeのあるパスにする)
NAME=hoge (表示される文字列、適当に)
DESC="hoge daemon" (表示される文字列、適当に)
test -f $DAEMON || exit 0
set -e
case "$1" in
start)
echo -n "Starting $DESC: "
$DAEMON -option1 -option2 2>&1 > /dev/null &
echo "$NAME."
;;
stop)
echo -n "Stopping $DESC: "
killall hoge 2>&1 > /dev/null
echo "$NAME."
;;
#;;
restart)
echo -n "Restarting $DESC: "
killall hoge 2>&1 > /dev/null
sleep 1
$DAEMON 2>&1 > /dev/null &
echo "$NAME."
;;
*)
N=/etc/init.d/$NAME
echo "Usage: $N {start|stop|restart}" >&2
exit 1
;;
esac
exit 0
でいけると思います(stopのほうはめんどくさいんで、とりあえずkillallで殺すようにしています)。これを/etc/init.d/hogeとして置いてください。attributeは-rwxr-xr-x root:rootなどでいいでしょう。
テストのためには
/etc/init.d/hoge start
で起動するかどうかpsなりログを見るなりして確認し、
/etc/init.d/hoge stop
で停止を確認します。
そして
http://vinelinux.org/manuals/server.html
/sbin/chkconfig --level 35 hoge on
でマルチユーザモードでコンソールのとき、及びマルチユーザモードでX Windowで立ち上がるときに起動するようにセットされます。
ktkr!?
startだけで十分です!
うがあああ、試したいけど只今外出先ですorz
これで解決していれば、500ptじゃ少ないかもしれませんね、もっと出します。
回答者制限を "回答者1人につき5件まで" に引き上げました、補足がありましたらまたお願いいたします・・・
-------------
結局解決できませんでした・・・
サーバを立ち上げるたびに手動でバックグラウンドで動かして、logout しています・・・
ご助言有難う御座いました。
適当な場所とは?参考を読まないと個別の環境には合わせられないということでしょうか。
さらにやさしくおねがいしますw
なぜなら脳みそがとろけそうなほどlinux鯖をいじくり倒してそろそろ60時間が経過します、この間睡眠は 2時間、もう思考能力が落ちてます、
もちろん、この件で60時間悩んでるわけではありませんけども・・・