Не делай этого!

Не делай этого!

У меня есть следующий скрипт, который должен запустить сервер Mongo DB и запустить мое приложение после перезагрузки

Вот скрипт, который я написал:

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

и затем я добавляю этот скрипт в crontab, чтобы запланировать его запуск при перезагрузке

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

затем я перезагружаю машину с помощью команды

sudo reboot 

но ничего не происходит, может кто-нибудь подсказать в чем проблема?

решение1

Не делай этого!

В вашем подходе есть две ошибки.

  1. Не запускайте службу systemd с помощью cron! Systemd имеет свой собственный метод запуска служб при запуске/перезагрузке компьютера.

  2. Не используйте 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также путь к команде.

Надеюсь это поможет

Связанный контент