2016-12-17 9 views
1

요구 사항 :백그라운드에서 리눅스에서 응용 프로그램을 실행하는 방법은 있지만 응용 프로그램과 상호 작용할 가능성은 있습니까?

  • 내가 (물론 시작시) 백그라운드에서 리눅스에 내 응용 프로그램을 실행합니다.

  • 콘솔에서 직접 start/stop/restart 명령을 호출 할 수 있기를 원합니다 (콘솔에서 직접 간단한 명령을 호출하면 /etc/init.d와 마찬가지로 간단해야합니다).

  • 나는 상태를 호출 할 수 있기를 원하며,이 명령이 어떻게해서든지 자신이 반환 한 응용 프로그램의 실제 상태를 얻길 원합니다. 나는 String을 반환하거나 stdin을 사용하여 명령을 전송하는 몇 가지 메소드를 호출 할 수 있다고 생각했지만 아무 것도 수행하지 않았을 때 ... & 또는 start-stop-daemon을 입력하면 stdin이 분리됩니다. 응용 프로그램에 stdin을 다시 연결할 수있는 간단한 방법이 있습니까 (필자는 파이프를 만들 수있는 것을 보았습니다 만, 꽤 복잡합니다). 또는 응용 프로그램이 데몬으로 시작된 후 응용 프로그램과 통신하는 가장 좋은 방법은 무엇입니까 (소켓을 만들고 예를 들어 텔넷을 통해 연결할 수 있지만 먼저 텔넷을 시작하지 않고 콘솔에서 직접 할 수있는 더 간단한 솔루션과 가능성을 찾고 있습니다))? 이상적으로는 모든 명령을 보낼 수있는 가능성을 얻기 위해 큰 수 있지만 간단한 상태 (다시하지만 - 그것은 그 상태 somnehow를 얻을 수있는 응용 프로그램과 통신 할) 충분합니다 나는 많은 다른 대답을 발견

. 그들 중 일부는 단순히 nohup과 &을 사용하고 다른 일부는 nohup과 &은 구식이라고 말합니다. 일부 답변은 start-stop-daemon 또는 JSvc (java 용)를 사용한다고 말합니다. 그러나 그들 중 누구도 저에게이 3 가지 요구 사항을 충족시키지 못할 것 같습니다.

그래서 ... 3 가지 요구 사항을 모두 충족시키는 가장 간단한 방법은 무엇입니까?

추신. 나는 스크린을 사용하고 싶지 않다. 응용 프로그램은 Linux 데몬으로 실행해야합니다.

PPS. 응용 프로그램은 Java로 작성되었지만 Java에 국한되지 않는 일반적인 해결책을 찾고 있습니다.

+1

IMHO 명명 된 파이프가 올바른 방법입니다. –

+0

Stack Overflow는 프로그래밍 및 개발 관련 질문에 대한 사이트입니다. 이 질문은 프로그래밍이나 개발에 관한 것이 아니기 때문에 주제와는 거리가 먼 것처럼 보입니다. 도움말 센터에서 [여기에서 내가 질문 할 수있는 항목은 무엇입니까?] (http://stackoverflow.com/help/on-topic)를 참조하십시오. 아마도 [Super User] (http://superuser.com/) 나 [Unix & Linux Stack Exchange] (http://unix.stackexchange.com/)가 더 나은 곳이 될 것입니다. 또한 [Dev Ops에 대한 질문은 어디에 게시합니까?] (http://meta.stackexchange.com/q/134306) – jww

답변

1

필요에 따라 데몬과 통신 할 수있는 명령 줄 도구를 만들어야합니다. 도구 자체는 TCP/IP 또는 명명 된 파이프를 사용할 수 있습니다.

그런 다음 콘솔에서 cli-tool start|stop|restart|status을 사용하십시오.

시작 시퀀스 (사용자 로그인 전)에서 데몬을 시작해야하는 경우 init 시스템 (init.d, systemd, OpenRC 등)을 처리해야합니다.

드래곤 여기 :

  1. init CLI를 통해 수동 정지 한 후 데몬을 다시 시작하지 않습니다 있는지 확인하십시오. 특히 경우 처음 시작 스크립트를 사용 수퍼 유저 권한이나 응용 프로그램 별 사용자와 깊은 init 통합, 당신은 sudo cli-tool start을 사용해야 할 수도 있습니다 경우 다시 시작이 어려울 수 있습니다 있도록

  2. 명령 줄 도구 자체는 권한이없는 사용자의 권한으로 실행됩니다.이 하나 개의 가능한 솔루션을 방지하기 위해

init를 통해 영원히 실행 래퍼 데몬을하고 적절한 권한을 가진 기본 응용 프로그램 (시작 - 정지)를 제어하는 ​​것입니다.

단점 : 데몬을위한 두 가지 추가 도구를 개발하십시오.

장점 : 랩퍼 데몬은 수퍼 유저/특정 사용자와 사용자 공간 사이의 회로 차단기로 작동 할 수 있습니다.

+0

이것이 내가 생각한 것입니다. 나는 약간의 접근 방식을 변경해야합니다. 이제 나는 하나의 질문을 남겼습니다 : 일반적인 현대 애플 리케이션에서 상태가 어떻게 작동합니까? 예를 들어 /etc/init.d/xxx 상태를 호출 할 때 - 일부 응용 프로그램의 경우 현재 상태에 대한 정말 좋은 정보를 출력합니다. 정보를 얻는 일반적인 방법은 무엇입니까? –

+0

init.d 스크립트의 사용자 정의 상태 섹션을 통해. init.d/xxx 소스의'status '사례를 보라. 응용 프로그램에 따라 다르지만 일반적으로 추가 상태 정보를 표시하기 위해 명령 줄 도구를 호출하는 것이 일반적입니다. – Nikolay

+0

괜찮아요, 고마워요, 당신의 노력에 대한 몇 가지 포인트를 줄 답변을 수락합니다 :) –