Jetson & 머신러닝

Jetson Xavier에서 부팅시 자동으로 어플리케이션 데몬 실행

아크리엑터 2024. 6. 16. 01:06
반응형

오래 전에 라즈베리파이에서 사용했던 방식을 Xavier에도 동일하게 설정해서 사용했었는 것으로 기억하는데,

Xavier를 완전 초기화 한 후에, 설정을 잘못 했는지 기존의 방식으로는 처리가 안되어서, 아래 방법으로  처리하였다.

1. /lib/systemd/system/ 폴더에 파일을 하나 만들었다. 이름은 safe_shutdown.service로 지정하였고, 내용은 다음과 같이 등록하였다.   root 권한이 아닌, 일반 계정으로 실행시키려면, Service섹션에 "User=ID" 를 넣어주면 된다.

[Unit]
Description=Safe Shutdown
After=network.target

[Service]
Type=simple
ExecStart=/usr/bin/python3 /home/igi/bot/safe_shutdown/safe_shutdown.py 
WorkingDirectory=/home/igi/bot/safe_shutdown
Restart=always
RestartSec=3

[Install]
WantedBy=multi-user.target

부팅할 때, network이 올라온 후에 실행되도록 하고, 실행되는 것은 execstart에 명령어를 정의하였다.

위의 각 섹션에 대해서는 chatgpt에게 설명을 부탁했더니, 아래와 같이 설명한다.

[Unit] 섹션

 

  • Description: 서비스에 대한 간단한 설명입니다. 여기서는 "Safe Shutdown"이라는 이름의 서비스를 설명하고 있습니다.
  • After=network.target: 이 서비스는 network.target 이후에 실행될 수 있도록 설정되어 있습니다. network.target은 네트워크 인터페이스가 준비된 후에 동작합니다.

[Service] 섹션

 

  • Type=simple: 서비스의 유형을 지정합니다. simple은 단순히 ExecStart 명령을 실행하는 기본 유형입니다.
  • ExecStart: 서비스가 시작될 때 실행되는 명령어입니다. 여기서는 /usr/bin/python3 /home/igi/bot/safe_shutdown/safe_shutdown.py를 실행하여 Python 3 인터프리터를 사용하여 safe_shutdown.py 스크립트를 실행합니다.
  • WorkingDirectory: 서비스가 실행될 작업 디렉토리를 지정합니다. 여기서는 /home/igi/bot/safe_shutdown으로 설정되어 있습니다.
  • Restart=always: 서비스가 비정상적으로 종료되었을 경우 자동으로 재시작하도록 설정합니다.
  • RestartSec=3: 재시작 간격을 지정합니다. 이 경우 3초 후에 재시작을 시도합니다.

[Install] 섹션

  • WantedBy=multi-user.target: 이 서비스가 multi-user.target에서 원하는 대상으로 지정됩니다. multi-user.target은 시스템이 멀티 유저 모드로 진입했을 때 실행되는 기본 대상입니다. 즉, 시스템이 사용자 로그인을 허용하는 모드에서 이 서비스가 활성화됩니다.

요약

이 설정 파일은 Safe Shutdown이라는 이름의 서비스를 정의하며, 네트워크가 준비된 후에 Python 스크립트를 실행하여 시스템을 안전하게 종료하도록 설계되었습니다. 서비스는 비정상적으로 종료될 경우 자동으로 재시작되며, 시스템의 멀티 유저 모드로 진입할 때 자동으로 활성화됩니다.

 

2. systemd 데몬을 리로딩

$ sudo systemctl daemon-reload

3. 서비스 활성화

$ sudo systemctl enable safe_shutdown.service

Created symlink /etc/systemd/system/multi-user.target.wants/safe_shutdown.service → /lib/systemd/system/safe_shutdown.service.

   /etc/systemd/system/multi-user.target.wants/ 폴더에 파일링크를 자동으로 걸어준다.

4, 서비스 시작

sudo systemctl start safe_shutdown.service

해당 프로그램이 데몬으로 실행된다.

반응형