Если я запустил следующую команду, все будет работать так, как ожидалось:
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
делает что-то интересное, поэтому он не работает, как вы упомянули выше.
Вы можете попробовать два варианта:
nohup mongod --fork --dbpath /path/to_data/ --port 27027 --syslog &
Надеюсь, это поможет.