У меня есть следующий скрипт, который должен запустить сервер Mongo DB и запустить мое приложение после перезагрузки
Вот скрипт, который я написал:
sudo systemctl restart mongod
cd airnotifier/
sudo python3 ./app.py
и затем я добавляю этот скрипт в crontab, чтобы запланировать его запуск при перезагрузке
@reboot /home/user/project/script.sh
затем я перезагружаю машину с помощью команды
sudo reboot
но ничего не происходит, может кто-нибудь подсказать в чем проблема?
решение1
Не делай этого!
В вашем подходе есть две ошибки.
Не запускайте службу systemd с помощью cron! Systemd имеет свой собственный метод запуска служб при запуске/перезагрузке компьютера.
Не используйте
sudo
внутри скрипта, который будет использоваться в задании cron. Вам также нужно будет указать полный путь к файлам/программам.
1. Использованиеenable
Так как mongod
это уже служба systemd, вам не нужно запускать ее вручную при перезагрузке системы. Она должна запуститься автоматически. Если она не запускается, используйте следующую командутолько один раз:
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
также путь к команде.
Надеюсь это поможет