2014-06-17 3 views
3

봇을 내 Teamspeak3에 설치하고이 봇을 시작할 때 데몬으로 실행하고 싶습니다. 내 자신의 스크립트를 작성하여 init.d에 복사 한 다음 update-rc.d을 기본값으로 추가했습니다.Linux에서 데몬으로 jar 파일을 실행하십시오. 우분투

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 
+1

당신은'java'가 아닌'sudo'의 PID를 캡쳐하고 있습니다 ...'sudo'는'java' 명령을 실행 한 후'nohup'가 종료 된 후에 종료 될 것입니다. – twalberg

+0

@twalberg 그게 답이 아니라 주석이어야합니다. –

+0

또한 sudo PID 캡처를 피하기 위해'ps -ef | grep JTS3ServerMod.jar | awk '{print $ 2}''. 그것은 실행중인 프로세스의 PID를 제공해야합니다. –

답변

8

내 문제에 대한 다른 해결책을 찾았습니다. 나는 upstart (우분투에서만 사용 가능)을 사용하여 jar-File을 데몬으로 실행합니다. Upstart는 PID를 관리합니다. myservice.conf/etc/init (/etc/inid.d이 아님)에 추가하면 데몬이 부팅 할 때 시작되며 서비스로 관리 할 수 ​​있습니다. 이 파일은 실행 가능한 또는 당신은 예를 들어 정상적으로 서비스를 관리 할 수 ​​있습니다

아무것도 필요가 없습니다

service myservice restart 
service myservice status 
... 

내 구성-파일 :

description "myservice" 
author "your name" 

start on runlevel [3] 
stop on shutdown 

expect fork 

script 
    cd /home/username/ 
    sudo -u username java -jar /home/username/myservice/myservice.jar >/home/username/myservice.log 2>&1 
    emit myservice_running 
end script 

이 솔루션은 정말 쉽고, 내 우분투 12.04 서버에서 잘 작동합니다.

1

당신은이 라인에 오류가 있습니다

sudo -u $USER -c nohup java -jar $DIR/JTS3ServerMod.jar $DIR 2>>/dev/null >>/dev/null& 

당신은 sudosu의 구문을 혼합 한 것으로 나타났습니다. 버전 1.8 이전에는 sudo-c 옵션이 없었습니다. 다른 옵션을 실행 한 후에 실행하라는 명령 만 내릴 수 있습니다. 1.8에서는 -c 옵션이 있지만 명령을 지정하는 것이 아닙니다 (자원 사용을 주어진 로그인 클래스의 것으로 제한하기위한 것입니다). sudo이 잘못된 구문에 대한 오류 메시지를 인쇄하고 있지만 모든 출력을 /dev/null으로 리디렉션하고 있기 때문에 표시되지 않습니다. 당신이 stdout 같은 핸들 stderr를 보낼 2>&1 구문을 사용하여 명령을 약간 단순화 할 수 있습니다, 또한

sudo -u $USER nohup java -jar $DIR/JTS3ServerMod.jar $DIR 2>> /dev/null >> /dev/null & 

, 그리고 필요가 없다 :

는 단순히 유효한 명령을 형성 -c를 제거 /dev/null에 쓸 때 추가 모드 용 :

sudo -u $USER nohup java -jar $DIR/JTS3ServerMod.jar $DIR >/dev/null 2>&1 & 
+0

스크립트를 변경했지만 프로세스가 여전히 시작되지 않습니다 – Henok

+0

리디렉션없이 실행하고 수정 된 명령이 인쇄되고 오류 메시지가 표시되는지 확인하십시오. –

+0

'sudo -u $ USER nohup java -jar $ DIR/JTS3ServerMod.jar '리다이렉트가 없다면 내 말이 무슨 뜻입니까? 아무 일도 일어나지 않기 때문에 – Henok

관련 문제