Tag: 라즈베리파이

  • 라즈베리파이: 데스크탑 부팅 후 스크립트 자동 실행 (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초 대기 (필요에 따라 조절)
      # ... 나머지 스크립트 내용 ...

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