jar 파일을 시작할 때 및 로그 아웃 할 때 실행하는 방법은 무엇입니까?


30

어디서부터 시작해야할지 모르겠습니다. 데몬에 대해 읽었으며 개념을 이해하지 못했습니다.

자세한 내용은 :

  • 인터넷에서 RSS를 통해 멈추지 않는 크롤러를 작성했습니다.
  • 크롤러는 자바로 작성되었으므로 지금은 항아리입니다.
  • Ubuntu 11.04가 설치된 컴퓨터의 관리자입니다.
  • 기계가 충돌 할 가능성이 있으므로 기계를 시작할 때마다 크롤러를 실행하고 싶습니다.
  • 또한 로그 아웃해도 계속 실행되고 싶습니다. 이것이 가능한지 확실하지 않지만 대부분 로그 아웃했으며 여전히 크롤링하려고합니다.

어떤 아이디어? 누군가 올바른 방향으로 나를 가리킬 수 있습니까?

가장 간단한 솔루션을 찾고 있습니다.

답변:


32

SysVInit을 사용하여이를 수행하는 쉬운 방법이 있습니다. 명령:

  1. 애플리케이션의 시작 및 중지 스크립트를 작성하십시오. 우리의 예에서 다음과 같이 디렉토리에 넣으십시오.

    • 스크립트 시작 : /usr/local/bin/myapp-start.sh
    • 스크립트 중지 : /usr/local/bin/myapp-stop.sh

    각각은 앱을 실행 / 중지하기위한 지침을 제공합니다. 예를 들어 myapp-start.sh내용은 다음과 같이 간단 할 수 있습니다.

    #!/bin/bash
    
    java -jar myapp.jar 
    

    중지 스크립트의 경우 다음과 같습니다.

    #!/bin/bash
    # Grabs and kill a process from the pidlist that has the word myapp
    
    pid=`ps aux | grep myapp | awk '{print $2}'`
    kill -9 $pid
    
  2. 다음 스크립트 ( myscript)를 만들어 넣습니다 /etc/init.d.

    /etc/init.d/myscript 함유량:

    #!/bin/bash
    # MyApp
    #
    # description: bla bla
    
    case $1 in
        start)
            /bin/bash /usr/local/bin/myapp-start.sh
        ;;
        stop)
            /bin/bash /usr/local/bin/myapp-stop.sh
        ;;
        restart)
            /bin/bash /usr/local/bin/myapp-stop.sh
            /bin/bash /usr/local/bin/myapp-start.sh
        ;;
    esac
    exit 0
    
  3. 시스템 시작 스크립트를 넣습니다 (SysV 사용). 다음 명령을 실행하십시오 ( root ).

    update-rc.d myscript defaults 

추신 : Upstart가 훌륭하고 신랄하다는 것을 알고 있지만 오래된 SysV init 시스템을 선호합니다.


1
그러나 시스템은 어떤 매개 변수를 사용할지 어떻게 알 수 있습니까? "시작"으로 설정하는 방법 여기에서 시도했지만 작동하지 않았습니다.
John John Pichler 2014 년

1
이것은 작동하지만 "service myapp start"명령은 명령을 종료하지 않습니다.
Tobia

이제 myscript에서 start | stop | restart 옵션을 사용하는 방법은 무엇입니까?
Codevalley

또한 3 단계를 수행 한 후에도 시작시 항아리가 실행되지 않습니다. 권한이나 경로 등을 변경해야합니까?
Codevalley

@Codevalley, 내가 언급 했듯이이 방법은 SysV init입니다. 서비스 또는 다른 명령을 사용하려면 시작 작업을 작성해야합니다. 그러나 만약 당신이 이것을하려고한다면, 당신은
체계적인

6

예! 것이 가능하다. :) Upstart 는 서비스가 계속 실행되도록하는 방법입니다. 기본적으로 5 개의 패키지가 설치되어 있습니다.

  • init 데몬 및 initctl 유틸리티 시작
  • upstart-logd는 logd 서비스를위한 logd 데몬 및 작업 정의 파일을 제공합니다
  • upstart-compat-sysv는 rc 작업과 SysVinit와의 호환성을 제공하는 재부팅, 런레벨, 종료 및 telinit 도구에 대한 작업 정의 파일을 제공합니다
  • startup-tasks는 시스템 시작 작업을위한 작업 정의 파일을 제공합니다
  • 시스템 서비스는 tty 서비스에 대한 작업 정의 파일을 제공합니다

학습은 매우 즐겁고 가치가 있습니다. Upstart에는 http://upstart.ubuntu.com/ 웹 사이트가 있습니다.


2019 년 현재 Upstart 웹 사이트에서 : "프로젝트는 유지 관리 모드에만 있습니다. 새로운 기능은 개발되지 않으며 일반적인 최소 조언으로 초기화 시스템을 옮기거나 시스템을 조언하는 것이 좋습니다"
Nav

2

3 가지 빠른 제안 ...

  1. 크리에이트 S의 에서 타트 스크립트 /etc/rc3.d대응 (다중 사용자 콘솔 모드) K에게 로 병이 스크립트 /etc/rc.0/etc/rc6.d제어 방식으로 자바 프로그램을 죽일 때 시스템 다운 능력 (runevel 0) 또는 재부팅 (실행 레벨 6) 참조 실행 레벨에 소개 .

    런레벨 2 (rc2.d)에서 Java 앱을 시작할 수 있지만 크롤러로 TCP / IP가 필요합니다. 따라서 런레벨 2에서 미리 네트워킹 서비스를 사용할 수 있는지 확인하십시오. 네트워킹은 확실히 런레벨 3에 있습니다.

    /etc/init.d모든 실제 시작 / kill 스크립트를 포함합니다. /etc/rcN.d디렉토리에는 실행 레벨 N에 따라 각각 시작하거나 종료하기 위해 S 또는 K가 접두사로 연결되어 있습니다.

  2. 로 실행되는 프로세스 crond는 로그 아웃간에 지속되어야합니다. 아마 당신의 crontab에 추가하십시오.

  3. 프로세스 실행 nohup도 지속되어야합니다. nohup : 로그 아웃 한 후에도 명령 실행을 참조하십시오 .

    $ nohup java -jar myapp.jar &

    기본적으로 myapp.jar의 표준 출력은이라는 파일로 이동 ./nohup.out하거나 $HOME/nohup.out전자 파일을 쓸 수없는 경우 로 이동합니다 .


그리고 로그 아웃 할 때 여전히 백그라운드에서 실행됩니까?
RanZilber

0

또한 다음을 통해 애플리케이션을 만들 때주의하십시오.

  update-rc.d myscript defaults 

권한을 0755로 설정하고 .sh를 사용하기 전에 경로를 얻으십시오. 스크립트가 /root/test.sh에 있다고 가정하고 /root/액세스하기 전에 먼저 CD로 변경해야합니다 test.sh.

그래서 가장 좋은 방법은 init.d에서 SH를 만들고 경로를 변경 sh하고 시작 기능에서 실행하는 것입니다.



당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.