저는 Python 스크립트를 사용하여 데이터를 수집하는 로거를 실행하고 있습니다. 현재 tmux를 사용하여 SSH 터널을 분리하고 닫을 수 있습니다. 시스템이 시작될 때 시작되기를 원합니다.
나는 팔로우했다이 조리법엄밀히 말하면 샘플 Python 스크립트를 삽입하는 대신 내 스크립트를 삽입한 것뿐입니다. 그 외에는 스크립트와 디렉터리 이름 등까지 정확하게 따릅니다.
레시피는 다음과 같습니다(외부 참조가 손실될 수 있으므로).
Systemd 항목 만들기
sudo nano /etc/systemd/system/myapp.service
[Unit] # After=network.service Description=My App [Service] Type=simple # WorkingDirectory=/code/python/myapp ExecStart=/code/scripts/myapp.sh # User=do-user [Install] WantedBy=multi-user.target # WantedBy=default.target
Bash 스크립트 만들기
nano /code/scripts/myapp.sh
#!/bin/bash # cd /code/python/myapp python3 /code/python/myapp/run.py >> /code/logs/myapp.log 2>&1 mkdir /code/logs
Python 스크립트 만들기
nano /code/python/myapp/run.py
import signal import time import datetime is_shutdown = False def stop(sig, frame): print(f"SIGTERM at {datetime.datetime.now()}") global is_shutdown is_shutdown = True def ignore(sig, frsma): print(f"SIGHUP at {datetime.datetime.now()}") signal.signal(signal.SIGTERM, stop) signal.signal(signal.SIGHUP, ignore) print(f"START at {datetime.datetime.now()}") while not is_shutdown: print('.', end='', flush=True) time.sleep(1) print(f"END at {datetime.datetime.now()}")
테스트 시스템
파일 권한 설정
sudo chmod 744 /code/scripts/myapp.sh
sudo chmod 664 /etc/systemd/system/myapp.service
서비스 활성화
sudo systemctl daemon-reload
sudo systemctl enable myapp.service
테스트 서비스
sudo systemctl start myapp.service
상태 확인
sudo systemctl start status.service
로그 확인
tail -f /code/logs/myapp.log
그러나 서비스를 시작하려고 하면 다음 오류가 발생합니다.
$ sudo chmod 744 /code/scripts/myapp.sh
$ sudo chmod 664 /etc/systemd/system/myapp.service
$ sudo systemctl daemon-reload
$ sudo systemctl enable myapp.service
$ sudo systemctl start myapp.service
$ sudo systemctl start status.service
Failed to start status.service: Unit status.service not found.
$ tail -f /code/logs/myapp.log
...
에 있는 로그가 /code/logs/myapp.log
비어 있습니다. 이전 시도에서는 로그에 모듈 가져오기 오류가 포함되어 있었습니다. 스크립트를 약간 변경했는데 이후에도 로그가 여전히 비어 있습니다.
로거를 실행하는 에지 장치에서 사용 중인 OS는 다음과 같습니다.
우분투 18.04.5 LTS(GNU/Linux 4.15.0-147-일반 x86_64)
내가 뭘 잘못하고 있는지 아시나요?