다시 시작한 후 여러 "화면"스크립트를 시작하는 가장 좋은 방법은 무엇입니까? (센 토스)


0

우리는 centos를 사용하고 있습니다. 서버가 다시 시작되고 OS가 완전히로드되는 즉시 특정 사용자 ( "foo")가 화면에서 3 개 또는 4 개의 스크립트를 시작하도록합니다.

예를 들어

screen -d -m -S script1 forever -o script1.log -e script1.log -l script1.log -c php /path/to/script1.php

CentOS를 사용하여이를 달성하는 가장 좋은 방법은 무엇입니까? init.d를 너무 많이 파고 드는 것을 피하고 싶습니다.

systemd를 사용하여 서비스를 검사하고 ( "알림") 다음을 확인합니다.

   Loaded: loaded (/etc/systemd/system/notify@.service; enabled)
   Active: failed (Result: exit-code) since Sun 2016-03-20 15:08:04 EDT; 14s ago
  Process: 1690 ExecStop=/usr/bin/screen -S notify -X quit (code=exited, status=1/FAILURE)
  Process: 941 ExecStart=/usr/bin/screen -d -m -S notify forever -o notifyout.log -e notifyerr.log -l notifyforever.log -c php /path/to/script/notify.php (code=exited, status=0/SUCCESS)
 Main PID: 946 (code=exited, status=0/SUCCESS)

왜 멈추고 있습니까? 어떻게 디버깅을 시작할 수 있습니까?


1
"우리는 centos를 사용하고 있습니다." 어떤 버전? 또한 init 시스템을 사용하여 이러한 스크립트를 시작하는 데 혐오감을 느끼는 이유는 시스템의 초기 설정 또는 다른 프로세스 관리자 대신 화면을 사용하도록 요구하는 요구 사항이있는 것입니다.
Steven D

죄송합니다. 너무 빨리 입력했습니다. 좀 더 현명한 질문으로 내 의견을 업데이트했습니다 : D
Steven D

@StevenD는 CentOS Linux 릴리스 7.1.1503 (Core)을 사용하고 있습니다. '스크린'을 사용하는 아이디어가 마음에 들었습니다. '영원한'도구와 잘 작동하는 것 같고 수정으로 인해 다시 시작 해야하는 경우 화면을 계속 확인하는 것이 더 쉬워 보이기 때문입니다. 그러나 가장 적합한 방법을 선택하는 데 전적으로 마음이 열려 있습니다.
잭 버트

이것이 당신이 말하는 영원한 프로그램입니까? github.com/foreverjs/forever
Steven D

네. 영원히 스크립트를 모니터링하고 충돌이 발생하면 다시 시작합니다. 또한 모든 출력 (stdout 및 stderr)을 로그 파일로 보냅니다.
잭 버트

답변:


2

이것은 CentOS 7이므로 시스템 서비스를 사용하여 서비스를 시작해야합니다. 화면 안에서 실행할 수도 있습니다. 로부터 아치 리눅스 위키 :

파일을 작성하십시오. /etc/systemd/system/screen@.service

[Unit]
Description=screen
After=network.target

[Service]
Type=simple
User=%i
ExecStart=/usr/bin/screen -DmS autoscreen
ExecStop=/usr/bin/screen -S autoscreen -X quit

[Install]
WantedBy=multi-user.target

그런 다음 systemctl enable screen@USERNAME.service 모든 사용자가 실행할 수 있도록 할 계획 이 없다면 파일 이름에서 @를 제거하고 장치 이름에서 @USERNAME을 제거하고 활성화 할 때 단위 파일에서 사용자.


감사합니다 ... 추가 디버깅 정보로 게시물을 업데이트했습니다.
Zack Burt

0

나는 이것을 편집 /etc/rc.local하고 추가했다.

/etc/init.d/start_bg_scripts

그런 다음 추가했습니다 /etc/init.d/start_bg_scripts:

#!/bin/bash
/usr/bin/screen -d -m -S script1 forever --minUptime 1 --spinSleepTime 1 -o script1out.log -e script1err.log -l script1forever.log -c php /path/to/script.php

--minUptime 1 및 --spinSleepTime 1은 나머지 시스템 서비스 (예 : mysqld)를 사용할 수있을 때까지 계속 재 연결을 시도 함을 의미합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.