프로그래밍/리눅스 프로그래밍
[systemd] systemd를 시용한 자가 업데이트 로직
jinkwon.kim
2022. 1. 6. 21:53
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
반응형