我想安裝一個bot到我的Teamspeak3並在啓動時運行這個殭屍守護程序作爲守護進程。我寫了自己的腳本並將其複製到init.d,然後將其與update-rc.d
一起添加爲默認值。在Linux上運行jar文件作爲守護進程Ubuntu
#!/bin/sh
#
# JTS3ServerBot Script
#
USER="ts"
NAME="jts3"
DIR="/home/ts/jts3/"
case $1 in
start)
echo "Starting ${NAME} ..."
if [ ! -f $DIR/pid ]; then
sudo -u $USER -c nohup java -jar $DIR/JTS3ServerMod.jar $DIR 2>> /dev/null >> /dev/null &
echo $! > $DIR/pid
echo "${NAME} started ..."
else
echo "${NAME} is already running ..."
fi
;;
stop)
if [ -f $DIR/pid ]; then
PID=$(cat $DIR/pid);
echo "Stopping ${NAME} ..."
kill $PID;
echo "${NAME} stopped ..."
rm $DIR/pid
else
echo "${NAME} is not running ..."
fi
;;
restart)
if [ -f $DIR/pid ]; then
PID=$(cat $DIR/pid);
echo "Stopping ${NAME} ...";
kill $PID;
echo "${NAME} stopped ...";
rm $DIR/pid
echo "Starting ${NAME} ..."
sudo -u $USER -c nohup java -jar $DIR/JTS3ServerMod.jar $DIR 2>> /dev/null >> /dev/null &
echo $! > $DIR/pid
echo "${NAME} started ..."
else
echo "${NAME} is not running ..."
fi
;;
esac
生成一個pid文件,但如果我嘗試殺死與此pid進程我得到一個錯誤,該進程不存在。如果我使用top
,則列出的PID沒有任何過程。
[email protected]:~# service jts3 start
Starting jts3 ...
jts3 started ...
[email protected]:~# cat /home/ts/jts3/pid
10206
[email protected]:~# kill 10206
bash: kill: (10206) - No such process
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1762 ts 20 0 1881m 14m 3408 S 0 1.4 215:47.28 ts3server_linux
32356 ts 20 0 164m 1576 1336 S 0 0.2 0:09.85 tsdnsserver_lin
您正在捕獲'sudo'的PID,而不是'java' ...'sudo'可能會在'nohup'在運行您的'java'命令後退出後退出。 – twalberg
@twalberg這應該是一個答案,而不是評論。 –
另外,爲了避免捕獲sudo PID,你應該使用'ps -ef | grep JTS3ServerMod.jar | awk'{print $ 2}''。這應該給你正在運行的進程的PID。 –