728x90
반응형
[개요]
linux상에서 프로그램 스스로 종료 시키고 재시작 하는 방법을 정리 합니다.
[Flow]
1. Program A 내부에서 update를 수행 하는 스크립트를 실행
system("nohup update.sh fork 2>&1 > /dev/null &");
을 system 명령어로 실행
2. "update script"는 system 명령어로 실행 되어 Prorgam A의 socket 정보 까지 모두 상속 받게 되었음으로 강제로 열려있는 fd를 종료 합니다.
for fd in $(ls /proc/$$/fd/); do
[ $fd -gt 2] && exec {fd}<&-
done
https://unix.stackexchange.com/questions/123413/close-all-file-descriptors-in-bash
3. script와 Program A의 연관성을 끊어 버리기 위해서 script를 daemon으로 다시 실행 합니다.
systemd-run --scope $0 new &
[update.sh 핵심 pseudocode 코드]
Systemd 일 경우
#!/bin/bash
for fd in $(ls /proc/$$/fd/); do
[ $fd -gt 2] && exec {fd}<&-
done
if $1 == fork
systemd-run --scope $0 new &
elif $1 == new
update코드 수행
fi
Systemd 사용 이전 시스템
#!/bin/bash
for fd in $(ls /proc/$$/fd/); do
[ $fd -gt 2] && exec {fd}<&-
done
if $1 == fork
nohup $0 new &
elif $1 == new
update코드 수행
fi
참고 사이트
728x90
반응형
'프로그래밍 > 리눅스 프로그래밍' 카테고리의 다른 글
[linux] libc와 glibc의 차이 (0) | 2022.01.13 |
---|---|
[compile] 공부 해야 할 것 (0) | 2022.01.12 |
프로그램 중복 실행 확인 코드 (0) | 2021.10.11 |
bash shell 키워드 의미 (0) | 2021.08.30 |
[Linux] realpath 구하기 (0) | 2021.08.11 |