bash 스크립트를 사용하여 데몬 프로세스를 생성하는 것이 안전합니까?

bash 스크립트를 사용하여 데몬 프로세스를 생성하는 것이 안전합니까?

완전 자동화된 상자(Raspberry-Pi 또는 OLinuXino 카드 등을 기반으로 함)를 만들고 싶습니다.

내 컴퓨터는 읽기 전용 파일 시스템과 램디스크(SD 카드 손상을 방지하기 위해)가 있는 Debian 기반 시스템을 실행합니다.

상자가 켜지거나 네트워크에 연결될 때마다 SSH를 통해 원격 서버에 자동으로 연결되는 스크립트를 만들고 싶습니다.

이를 위해 가장 간단한 해결책은 데몬으로 실행되는 셸 스크립트를 만드는 것이라고 생각합니다. 이 데몬은 상자가 종료되거나 네트워크 연결이 끊어질 때까지 활성 상태를 유지해야 합니다. 네트워크가 켜지거나 상자가 재부팅되면 스크립트가 다시 연결될 수 있어야 합니다.

질문: 쉘 스크립트가 이 작업을 수행할 만큼 안전하다고 생각하십니까? 아니면 다른 (더 안전한) 프로그래밍 언어(PERL, C, ...)를 사용해야 합니까?

답변1

많은 데몬은 실행을 위한 스크립팅 언어로 bash를 사용합니다. 사용하시면 아무런 문제가 없으실 겁니다.

답변2

일반적으로 bash(또는 일반적으로 쉘 스크립트)에서 데몬을 생성하는 것은 매우 까다롭습니다. 백그라운드 분기, 출력 및 오류 메시지 리디렉션, 신호 처리와 같은 일부 문제는 해결하기 쉽지 않습니다.

설명하신 특정 문제에 대해 respawn으로 자동 SSH 연결을 수행할 수 있는 일부 (무료) 소프트웨어가 이미 있습니다.

나는 사용한다autossh이 목적을 위해. 데비안에 패키지되어 있으며 잘 작동합니다.

답변3

bash매우 안전하지만 청소를 처리할 수 없으면 그다지 유용하지 않을 것입니다. 어떤 이유로든 종료된 경우 스크립트는 필요에 따라 상태를 새로 고칠 수 있도록 자체적으로 업데이트할 수 있어야 합니다. exec단순히 다음과 같이 하고 싶지는 않을 것입니다.

while :

...예를 들어. 빨리 늙어가는군요. 대신 다음과 같은 작업을 수행할 수 있습니다.

trap '' HUP EXIT
set_state() { echo stuff="'$(otherstuff)'"... ; }
chk_interval() { wait for something... ; }
exec_me() { exec env - $(set_state) "$0" <in >out 2>alsoout & ; }
chk_interval
exec_me

또한 청소를 수행하는 사람에 따라 달라질 수도 있습니다. 이것가장 단순한데몬 프로세스를 구현하는 방법은 다음과 같습니다.

init=path/to/executable/script

...임시 단일 목적 설치의 경우 커널 명령줄에서. 여기서 추론된 상대 값 /은 initramfs 입니다 /.

관련 정보