기동 직후 아래 형태로 죽는 경우다.
Failed at step EXEC spawning /usr/local/bin/node_exporter: No such file or directory
Failed at step EXEC spawning /usr/local/bin/node_exporter: Permission denied
ExecStart 에 적은 경로를 systemd 가 실행하지 못한 것이며, 원인은 대부분 다음 중 하나다.
# 1. 경로에 파일이 실제로 있는지 — 심볼릭 링크나 상대경로는 쓰지 않는다
ls -l /usr/local/bin/node_exporter
# 2. 실행 권한과 소유자 — User= 로 지정한 계정이 실행할 수 있어야 한다
sudo chmod 755 /usr/local/bin/node_exporter
sudo chown node_exporter:node_exporter /usr/local/bin/node_exporter
# 3. 아키텍처가 맞는지
file /usr/local/bin/node_exporter
uname -m
# 4. 스크립트라면 shebang 과 줄 끝 — Windows 에서 만든 파일은 CRLF 때문에 실패한다
head -1 /usr/local/bin/start.sh
sudo dnf install -y dos2unix && sudo dos2unix /usr/local/bin/start.sh
No such file or directory 인데 파일이 분명히 있다면 셸 스크립트의 shebang 이 가리키는 인터프리터가 없거나 줄 끝이 CRLF 인 경우가 많다. 이때 systemd 는 스크립트가 아니라 인터프리터를 못 찾은 것인데 메시지에는 스크립트 경로가 찍힌다.
SELinux 가 enforcing 인 환경에서 /usr/local/bin 이 아닌 곳에 바이너리를 두면 Permission denied 가 난다. ausearch -m avc -ts recent 로 확인한다.