다음과 같은 NodeJs 애플리케이션이 있습니다.app.jLinux RHEL 시스템에서 실행 중입니다. 노드를 사용하여 서비스를 시작합니다영원히응용 프로그램이 있는 디렉터리의 명령줄에 있는 모듈입니다.
> cd /usr/app/dir
> forever start app.js
이것은 잘 작동하지만 이제 우리는app.js시스템 재부팅 후 시작되므로체계화된작동하지 않는 것 같은 서비스 파일.
나는 누군가가 내가 보지 못하는 몇 가지 노골적인 문제를 지적할 수 있기를 바랐습니다.
/etc/systemd/system/fulltext.service파일
[Unit]
Description=FullText Server NodeJS Script app.js
After=network.target
[Service]
Environment="NODE_ENV=lint"
Environment="PATH=/usr/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/slsuser/.local/bin:/home/slsuser/bin"
WorkingDirectory=/usr/share/eBSE/current/
ExecStart=/usr/bin/forever start /usr/app/dir/app.js
ExecStop=/usr/bin/forever stop /usr/app/dir/app.js
User=root
Group=root
[Install]
WantedBy=multi-user.target
실행시 다음과 같은 오류가 발생함시스템 전체 텍스트 시작
fulltext.service - FullText Server NodeJS Script app.js
Loaded: loaded (/etc/systemd/system/fulltext.service; disabled; vendor preset: disabled)
Active: inactive (dead)
Oct 30 17:07:21 edc-v-slsftx01i04 forever[23421]: uid command script forever pid id logfile uptime
Oct 30 17:07:21 edc-v-slsftx01i04 forever[23421]: [0] gMOv /usr/bin/node /usr/app/dir/app.js 23415 23427 /root/.forever/gMOv.log 0:0:0:0.59
Oct 30 17:08:00 edc-v-slsftx01i04 systemd[1]: Started FullText Server NodeJS Script app.js.
Oct 30 17:08:00 edc-v-slsftx01i04 systemd[1]: Starting FullText Server NodeJS Script app.js...
Oct 30 17:08:01 edc-v-slsftx01i04 forever[23514]: warn: --minUptime not set. Defaulting to: 1000ms
Oct 30 17:08:01 edc-v-slsftx01i04 forever[23514]: warn: --spinSleepTime not set. Your script will exit if it does not stay up for at least 1000ms
Oct 30 17:08:01 edc-v-slsftx01i04 forever[23514]: info: Forever processing file: /usr/app/dir/app.js
Oct 30 17:08:01 edc-v-slsftx01i04 forever[23530]: info: Forever stopped process:
Oct 30 17:08:01 edc-v-slsftx01i04 forever[23530]: uid command script forever pid id logfile uptime
Oct 30 17:08:01 edc-v-slsftx01i04 forever[23530]: [0] dX9T /usr/bin/node /usr/app/dir/app.js 23524 23536 /root/.forever/dX9T.log 0:0:0:0.53
답변1
나는 이것이 오래된 질문이고 OP에 더 이상 답변이 필요하지 않다는 것을 알고 있습니다. 하지만 다른 사람이 나처럼 우연히 발견할 경우를 대비해...
영구 프로세스는 실제 프로세스를 시작한 후 종료됩니다 node app.js
.
서비스를 지정하지 않았으므로 Type=
기본값은 ExecStart=
기본 프로세스가 계속 실행될 것으로 예상하는 "단순"입니다. 따라서 기본 "영원한" 프로세스가 삭제되면 systemd는 하위 프로세스가 생성되었음을 인식하지 못하기 때문에 실패했다고 생각합니다.
Type=forking
아래에 추가해 보세요 [Service]
.
다음과 같이systemd.service 문서상태:
분기로 설정되면 ExecStart=로 구성된 프로세스가 시작의 일부로 fork()를 호출할 것으로 예상됩니다.상위 프로세스가 종료될 것으로 예상됩니다.시작이 완료되고 모든 통신 채널이 설정되면.아이는 계속해서 뛰어다닌다기본 서비스 프로세스로 간주되며 서비스 관리자는 상위 프로세스가 종료될 때 해당 장치가 시작된 것으로 간주합니다.