오류 내용
SYSTEM: Scheduled Task [Task 9] skipped because the task was already running. Please check the task content/settings.
node를 설치한 컨테이너이고 하루 한번 실행하도록 스케줄을 설정했는데,
테스트를 위해 직접 실행을 해보니 이미 실행 중이라 실행을 안 한단다..
내용 자체는 오류가 아니지만 내가 원하는 동작을 안 하면 그게 오류지 뭐..
ssh로 도커에 직접 접근해 현재 프로세스를 확인해 봤다.
ps aux
/bin/sh로 접근해 놓고 exit를 안 해서 쌓인 듯하다.
for pid in $(ps aux | grep '/bin/sh' | grep -v grep | awk '{print $2}'); do kill -9 $pid; done
모든 /bin/sh 프로세스를 강제 종료한다.
앞으로 exit를 잘해야겠다.
/bin/sh과 node 중 어떤 프로세스가 문젠지는 모르겠다. GPT는 다음과 같이 답해준다.
1. /bin/sh 프로세스 문제
docker exec 명령을 실행할 때, 각 명령이 실행될 때마다 새로운 /bin/sh 세션이 생성됩니다. 이렇게 생성된 세션이 종료되지 않고 계속 유지되면, 예약된 작업에서 "이미 실행 중"으로 간주될 수 있습니다.
증상:
- 예약된 작업은 새로운 작업을 실행하려 하지만, 이전 작업에서 생성된 /bin/sh 프로세스가 아직 남아 있는 경우, 시스템은 해당 프로세스를 "현재 작업 실행 중"으로 인식합니다.
- 이 경우 "작업이 이미 실행 중입니다"라는 메시지를 출력하고 새로운 작업 실행을 건너뜁니다.
확인 방법:
docker exec <container> /bin/sh -c "ps aux" 명령으로 /bin/sh 프로세스 목록을 확인하세요.
2. node 프로세스 문제
npm start를 통해 실행된 Node.js 프로세스는 애플리케이션이 실행 중인 동안 종료되지 않습니다. 따라서 Node.js 애플리케이션이 실행 중일 경우, 예약된 작업이 새로 시작되지 않을 수 있습니다.
증상:
- node 프로세스는 애플리케이션 실행을 담당하며, 종료되지 않은 상태에서 예약 작업이 다시 실행되면, "이미 실행 중"으로 간주될 수 있습니다.
- 특히, docker exec를 통해 실행된 작업이 동일한 컨테이너에서 Node.js와 충돌할 가능성이 있습니다.
확인 방법:
docker exec <container> /bin/sh -c "ps aux | grep node" 명령으로 실행 중인 node 프로세스를 확인하세요.
어찌 됐든 스케줄러를 통해 실행하기 전에 node 던 /bin/sh 던 뭐라도 남아있다면 건너뛸 가능성이 있다는듯하다.
수정된 스케줄 명령어
docker exec <container> /bin/sh -c "
echo '[INFO] 기존 /bin/sh 및 Node.js 프로세스 종료 중...';
for pid in \$(ps aux | grep -E '/bin/sh|node' | grep -v grep | awk '{print \$2}'); do kill -9 \$pid; done;
echo '[INFO] 기존 프로세스 종료 완료. 새 작업 시작.';
cd /home/node/app && npm start
"
'Side-Project' 카테고리의 다른 글
[NAS] 시놀로지 ssh 도커 컨테이너 접근, 폴더 매핑 / 내가 자주 쓰는 명령어 (0) | 2024.10.18 |
---|---|
[NAS] 2024 시놀로지 nas 활용 - 포트포워딩, DSM 외부 접속 (0) | 2024.10.04 |
[NAS] 2024 시놀로지 nas 활용 - DS224+ 설치, 램 증설 (2) | 2024.09.30 |