bash 스크립트를 데몬으로 실행
내 PHP 스크립트를 X 번 실행하는 스크립트가 있습니다.
#!/bin/bash
while true; do
/usr/bin/php -f ./my-script.php
echo "Waiting..."
sleep 3
done
데몬으로 시작하려면 어떻게해야합니까?
쉘에서 전체 데몬으로 실행하려면 setsid
출력 을 사용 하고 리디렉션해야합니다. 출력을 로그 파일로 재 지정하거나 /dev/null
버릴 수 있습니다. 스크립트가 myscript.sh라고 가정하면 다음 명령을 사용하십시오.
setsid myscript.sh >/dev/null 2>&1 < /dev/null &
이렇게하면 현재 셸 (stdin, stdout 및 stderr)에서 프로세스가 완전히 분리됩니다. 출력을 로그 파일에 보관하려면 첫 번째 파일을 /dev/null
/ path / to / logfile로 바꾸십시오 .
출력을 리디렉션해야합니다. 그렇지 않으면 실제 데몬으로 실행되지 않습니다 (출력을 읽고 쓰는 데 셸에 따라 다름).
데몬은 대화 형 사용자가 직접 제어하는 것이 아니라 백그라운드 프로세스로 실행되는 프로그램입니다.
[아래 bash 코드는 Debian 시스템 용입니다-Ubuntu, Linux Mint 배포판 등]
간단한 방법 :
간단한 방법은 /etc/rc.local 파일을 편집 한 다음 거기에서 스크립트를 실행하는 것입니다 (즉, 시스템을 부팅 할 때마다) :
sudo nano /etc/rc.local
다음을 추가하고 저장하십시오.
#For a BASH script
/bin/sh TheNameOfYourScript.sh > /dev/null &
이를 수행하는 더 좋은 방법은 Upstart를 통해 데몬을 만드는 것입니다.
sudo nano /etc/init/TheNameOfYourDaemon.conf
다음을 추가하십시오.
description "My Daemon Job"
author "Your Name"
start on runlevel [2345]
pre-start script
echo "[`date`] My Daemon Starting" >> /var/log/TheNameOfYourDaemonJobLog.log
end script
exec /bin/sh TheNameOfYourScript.sh > /dev/null &
이것을 저장하십시오.
괜찮아 보이는지 확인하십시오.
init-checkconf /etc/init/TheNameOfYourDaemon.conf
이제 시스템을 재부팅하십시오.
sudo reboot
이제 시스템을 부팅 할 때 데몬이 실행 중임을 나타내는 로그 파일을 볼 수 있습니다.
cat /var/log/TheNameOfYourDaemonJobLog.log
• 이제 다음을 통해 데몬을 시작 / 중지 / 다시 시작 / 가져올 수 있습니다.
다시 시작 : 중지 된 다음 서비스를 시작합니다.
sudo service TheNameOfYourDaemonrestart restart
시작 : 실행 중이 아닌 경우 서비스를 시작합니다.
sudo service TheNameOfYourDaemonstart start
stop : 서비스가 실행중인 경우 중지됩니다.
sudo service TheNameOfYourDaemonstop stop
상태 : 서비스의 상태를 표시합니다.
sudo service TheNameOfYourDaemonstatus status
/etc/init.d/로 이동하면 skeleton이라는 데몬 템플릿이 표시됩니다.
복제 한 다음 시작 기능 아래에 스크립트를 입력 할 수 있습니다.
또 다른 멋진 트릭은 백그라운드에서 함수 나 서브 쉘을 실행하는 것입니다.
name(){
echo "Do something"
sleep 1
}
# put a function in the background
name &
#Example taken from here
#https://bash.cyberciti.biz/guide/Putting_functions_in_background
백그라운드에서 서브 쉘 실행
(echo "started"; sleep 15; echo "stopped") &
일부 논평자들은 이미 귀하의 질문에 대한 답변이 모든 배포판에 적용되지는 않는다고 말했습니다. 질문에 CentOS를 포함하지 않고 태그에만 포함했기 때문에 배포에 관계없이 진행 상황을 제어하기 위해 이해해야하는 주제를 여기에 게시하고 싶습니다.
- init 데몬이란 무엇입니까 (선택 사항)
- inittab 파일 (/ etc / inittab)이란 무엇입니까?
- inittab 파일이 배포판에서 수행하는 작업 (예 : 실제로 /etc/init.d의 모든 스크립트를 실행합니까?)
문제의 경우 / etc / inittab에 다음 줄을 추가하여 sysinit에서 스크립트를 시작하고 종료 될 경우 다시 생성되도록 할 수 있습니다.
# start and respawn after termination
ttyS0::respawn:/bin/sh /path/to/my_script.sh
The script has to be made executable in advance of course:
chmod +x /path/to/my_script.sh
Hope this helps
ReferenceURL : https://stackoverflow.com/questions/19233529/run-bash-script-as-daemon
'programing' 카테고리의 다른 글
Java 열거를 스트림으로 어떻게 전환합니까? (0) | 2021.01.16 |
---|---|
Jmap은 덤프를 만들기 위해 연결할 수 없습니다. (0) | 2021.01.16 |
Rails에서 jquery-ui 자동 완성을 설정하는 방법 (0) | 2021.01.16 |
IntegrityError 중복 키 값이 고유 제약 조건을 위반 함-django / postgres (0) | 2021.01.16 |
mysql-한 테이블에서 다른 테이블로 행 이동 (0) | 2021.01.16 |