라즈베리파이: 데스크탑 부팅 후 스크립트 자동 실행 (Crontab 대체)



라즈베리파이에서 특정 작업을 자동화하고 싶을 때 crontab을 떠올리기 쉽습니다. 하지만 crontab@reboot 옵션은 시스템 부팅 즉시 스크립트를 실행하기 때문에, 데스크탑 환경이 완전히 로드된 후에 GUI 애플리케이션이나 특정 서비스가 실행되기를 원한다면 적합하지 않을 수 있습니다.

이번 가이드에서는 crontab 대신 라즈베리파이 데스크탑 환경(특히 LXDE)이 완전히 부팅된 후 특정 스크립트를 자동으로 실행하는 효과적인 방법들을 알려드립니다.


방법 1: 데스크탑 시작 프로그램 (.desktop 파일) 활용 (권장)

이 방법은 사용자가 데스크탑에 로그인하면 자동으로 스크립트를 실행해줘 가장 간단하고 직관적입니다.

1. .desktop 파일 생성:

다음 명령어로 ~/.config/autostart/ 디렉토리에 .desktop 파일을 만드세요. 디렉토리가 없으면 자동으로 생성됩니다.

mkdir -p ~/.config/autostart
nano ~/.config/autostart/openwebui-autostart.desktop

2. .desktop 파일 내용 붙여넣기:

아래 내용을 복사하여 위 파일에 붙여넣고 저장하세요.
(저장: Ctrl + O, Enter / 종료: Ctrl + X)

[Desktop Entry]
Type=Application
Name=OpenWebUI 자동 시작
Comment=라즈베리파이 데스크탑 로그인 시 OpenWebUI 실행
Exec=/home/pi/openWebui_run.sh
Terminal=false
Hidden=false
NoDisplay=false
X-GNOME-Autostart-enabled=true

참고:

  • Exec=/home/pi/openWebui_run.sh: 실행할 스크립트의 실제 경로로 바꿔주세요.
  • Terminal=false: openWebui_run.sh 스크립트가 이미 내부적으로 터미널을 여는 로직을 가지고 있기 때문에 false로 설정합니다. 이렇게 해야 .desktop 파일이 다시 터미널을 열지 않습니다.

장점:

  • 사용자가 데스크탑에 로그인하면 확실히 실행됩니다.
  • 설정이 매우 간단합니다.
  • GUI 설정에서도 확인 및 관리가 편리합니다.

방법 2: systemd 사용자 서비스 사용

더 강력하고 세밀한 제어가 필요하거나 안정성이 중요한 경우 systemd 사용자 서비스를 사용할 수 있습니다.

1. 서비스 파일 디렉토리 생성:

mkdir -p ~/.config/systemd/user

2. 서비스 파일 생성:

다음 명령어로 ~/.config/systemd/user/ 경로에 .service 파일을 만드세요.

nano ~/.config/systemd/user/openwebui-user.service

3. 서비스 파일 내용 붙여넣기:

아래 내용을 복사하여 위 파일에 붙여넣고 저장하세요.
(저장: Ctrl + O, Enter / 종료: Ctrl + X)

[Unit]
Description=OpenWebUI 자동 시작 서비스
After=graphical-session.target

[Service]
ExecStart=/bin/bash -c "lxterminal -e 'sh -c \". /home/pi/venv_openWebui/bin/activate && open-webui serve; exec sh\"'"
# 만약 openWebui_run.sh 스크립트가 이미 터미널을 띄우는 로직을 포함한다면 아래 주석을 풀고 위 라인을 주석 처리:
# ExecStart=/home/pi/openWebui_run.sh
StandardOutput=file:/home/pi/openwebui_user_service.log
StandardError=file:/home/pi/openwebui_user_service_error.log
Restart=on-failure

[Install]
WantedBy=graphical-session.target

참고:

  • ExecStart: 실행할 명령을 지정합니다. 위에 제시된 명령어는 lxterminal을 통해 터미널을 열고 그 안에서 가상 환경 활성화 및 open-webui serve를 실행합니다. 만약 openWebui_run.sh가 이미 터미널을 여는 로직을 가지고 있다면 ExecStart=/home/pi/openWebui_run.sh로 변경하는 것이 더 간단할 수 있습니다.
  • StandardOutput, StandardError: 스크립트의 실행 로그를 지정된 파일에 저장하여 문제 발생 시 디버깅에 활용할 수 있습니다.

4. 서비스 활성화 및 시작:

systemctl --user enable openwebui-user.service # 부팅 시 자동 시작되도록 활성화
systemctl --user start openwebui-user.service  # 지금 바로 서비스 시작 (테스트용)

장점:

  • 시스템 부팅 과정 후반부에 더욱 안정적으로 실행됩니다.
  • 오류 발생 시 자동 재시작 등 고급 설정이 가능합니다.

중요 사항:

  • 스크립트 실행 권한: openWebui_run.sh 파일에 실행 권한이 있는지 확인하세요. 없으면 다음 명령어로 권한을 부여할 수 있습니다:
    chmod +x /home/pi/openWebui_run.sh
  • 스크립트 내부의 DISPLAY 환경 변수: openWebui_run.sh 스크립트 시작 부분에 export DISPLAY=:0가 포함되어 있는지 확인하세요. GUI 애플리케이션 실행 시 필요한 환경 변수입니다.
  • sleep 대기 시간: 스크립트 내부에서 sleep 명령어를 사용하여 충분한 대기 시간을 주는 것이 좋습니다. 이는 모든 데스크탑 서비스가 완전히 로드되는 시간을 확보하기 위함입니다.
    #!/bin/bash
    sleep 30 # 30초 대기 (필요에 따라 조절)
    # ... 나머지 스크립트 내용 ...

이 가이드가 라즈베리파이에서 원하는 스크립트를 데스크탑 부팅 후에 성공적으로 자동 실행하는 데 도움이 되기를 바랍니다!

 

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *