起動時に画面でプログラムを起動する

起動時に画面でプログラムを起動する

これは init.d (Debian Linux) のスクリプトです。

#! /bin/sh
# /etc/init.d/blah
#

# Some things that run always
touch /var/lock/McMyAdmin

# Carry out specific functions when asked to by the system
case "$1" in
start)
echo "Starting McMyAdmin "
screen -dmS Minecraft
sleep 2
screen -S Minecraft -X stuff "bash /opt/McMyAdmin/start.sh"`echo -ne '\015'`
;;
stop)
echo "Stopping McMyAdmin"
screen -S Minecraft -X stuff "\quit"`echo -ne '\015'`
;;
*)
echo "Usage: /etc/init.d/McMyAdmin {start|stop}"
exit 1
;;
esac

exit 0

問題は、スクリーン セッションを開始しても何も起こらないことです。1 行ずつ入力すると正常に動作しますが、スクリプトでは何も動作しません。スクリーン セッションは作成されますが、コマンドは送信されません。何が間違っているのでしょうか?

答え1

実行する前に、McMyAdmin インストール ディレクトリに cd する必要があります。別のディレクトリから start.sh スクリプトを実行することはできません。

変化:

screen -S Minecraft -X stuff "bash /opt/McMyAdmin/start.sh"`echo -ne '\015'`

cd /opt/McMyAdmin/
screen -S Minecraft -X stuff "sh start.sh"`echo -ne '\015'`

また、McMyAdmin を /opt/ に配置して、それを root として実行するのは、あまり良い考えではありません。代わりに、専用のユーザーを作成し、そのユーザーの crontab で @reboot 行を使用するか、initscript で su を使用して、サーバーの実行に使用するユーザーを変更する必要があります。

関連情報