Mongo DB 서버를 실행하고 재부팅 후 애플리케이션을 실행해야 하는 다음 스크립트가 있습니다.
내가 쓴 스크립트는 다음과 같습니다.
sudo systemctl restart mongod
cd airnotifier/
sudo python3 ./app.py
그런 다음 이 스크립트를 crontab에 추가하여 재부팅 시 실행되도록 예약합니다.
@reboot /home/user/project/script.sh
그런 다음 명령을 사용하여 머신을 재부팅합니다.
sudo reboot
하지만 아무 일도 일어나지 않습니다. 누가 문제가 무엇인지 말해 줄 수 있습니까?
답변1
그러지 마세요!
귀하의 접근 방식에는 두 가지 문제가 있습니다.
cron을 사용하여 시스템 서비스를 시작하지 마십시오! Systemd에는 컴퓨터가 시작/다시 시작될 때 서비스를 시작하는 자체 방법이 있습니다.
sudo
cron 작업에 사용될 스크립트 내부에서는 사용하지 마십시오 . 또한 파일/프로그램의 전체 경로를 제공해야 합니다.
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/
때 ( 이전을 기억하세요 ) 사용자 디렉터리에서 시작되지 않기 때문입니다.cron
root
sudo
crontab -e
cron의 또 다른 특징은 전체 PATH와 같은 모든 환경 변수가 없다는 것입니다. 따라서 명령에 대한 경로 python3
도 필요할 수 있습니다.
도움이 되었기를 바랍니다