그러지 마세요!

그러지 마세요!

Mongo DB 서버를 실행하고 재부팅 후 애플리케이션을 실행해야 하는 다음 스크립트가 있습니다.

내가 쓴 스크립트는 다음과 같습니다.

sudo systemctl restart mongod
cd airnotifier/
sudo python3 ./app.py

그런 다음 이 스크립트를 crontab에 추가하여 재부팅 시 실행되도록 예약합니다.

@reboot /home/user/project/script.sh

그런 다음 명령을 사용하여 머신을 재부팅합니다.

sudo reboot 

하지만 아무 일도 일어나지 않습니다. 누가 문제가 무엇인지 말해 줄 수 있습니까?

답변1

그러지 마세요!

귀하의 접근 방식에는 두 가지 문제가 있습니다.

  1. cron을 사용하여 시스템 서비스를 시작하지 마십시오! Systemd에는 컴퓨터가 시작/다시 시작될 때 서비스를 시작하는 자체 방법이 있습니다.

  2. sudocron 작업에 사용될 스크립트 내부에서는 사용하지 마십시오 . 또한 파일/프로그램의 전체 경로를 제공해야 합니다.

1. 사용enable

이미 시스템화된 서비스 이므로 mongod시스템을 다시 시작할 때 수동으로 시작할 필요가 없습니다. 자동으로 시작되어야 합니다. 시작되지 않으면 다음 명령을 사용하십시오한 번만:

sudo systemctl enable mongod

메모.이 명령을 사용하면 컴퓨터가 시작될 때 mongod.service가 자동으로 시작됩니다.

어떤 이유로든 이것이 작동하지 않는 경우 위 명령을 사용할 때 발생하는 오류와 같은 자세한 내용으로 질문을 업데이트하세요.

2. 사용sudo crontab e

를 통해 관리자 권한으로 스크립트를 실행하려면 스크립트를 넣지 cron마십시오 .sudo

를 사용하여 기존 줄을 제거합니다 crontab -e.

그런 다음 다음 명령을 사용하십시오.

sudo crontab -e

그런 다음 파일에 다음 줄을 추가합니다.

@reboot /home/user/project/script.sh

script.sh는 다음과 같아야 합니다.

#!/bin/bash
cd /full/path/to/airnotifier/
/usr/bin/python3 /full/path/to/airnotifier/app.py

전체 경로가 필요한 이유는 가 사용자로 시작될 /home/USER/project/airnotifier/때 ( 이전을 기억하세요 ) 사용자 디렉터리에서 시작되지 않기 때문입니다.cronrootsudocrontab -e

cron의 또 다른 특징은 전체 PATH와 같은 모든 환경 변수가 없다는 것입니다. 따라서 명령에 대한 경로 python3도 필요할 수 있습니다.

도움이 되었기를 바랍니다

관련 정보