Назад | Перейти на главную страницу

Проблема с разрешением при запуске mongo из скрипта

Если я запустил следующую команду, все будет работать так, как ожидалось:

sudo mongod --fork --dbpath /path/to_data/ --port 27027 --syslog

Однако, если я помещаю следующую команду в startmongo.sh и запускаю ее с помощью sudo, я получаю сообщение об ошибке:

mongod --fork --dbpath /path/to_data/ --port 27027 --syslog

Ошибка:

[root@server Folder]# sudo ./startmongo.sh
about to fork child process, waiting until server is ready for connections.
forked process: 2394
ERROR: child process failed, exited with error number 100
To see additional information in this output, start without the "--fork" option.

Если я посмотрю в файл журнала, то вижу следующее:

STORAGE [initandlisten] исключение в initAndListn: Location28596: Невозможно определить статус файла блокировки в каталоге данных / path / to_data /: boost :: filesystem :: status: Permission denied: «/path/tod_data/mongod.lock», завершение

Итак, как мне запустить Mongo из сценария?

--fork

    Enables a daemon mode that runs the mongod process in the background. By default mongod does not run as a daemon: typically you will run mongod as a daemon, either by using --fork or by using a controlling process that handles the daemonization process (e.g. as with upstart and systemd).

Поэтому, когда вы используете fork без использования sudo, у эффективного uid нет разрешения.

Изменить: я имею в виду, что если вы не хотите демонизировать процесс, вы должны использовать nohup с & и управлять всем в рамках сценария. С вашими журналами data directory /path/to_data/: boost::filesystem::status: Permission denied означают, что недавно созданный процесс не имеет разрешения на доступ к файлам или данным. Вот --fork делает что-то интересное, поэтому он не работает, как вы упомянули выше.

Вы можете попробовать два варианта:

  1. Использовать как nohup mongod --fork --dbpath /path/to_data/ --port 27027 --syslog &
  2. Добавьте sudo в скрипт или напрямую вызовите upstart или файл systemd из скрипта.

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