Linux

在 Redhat 7 上創建 mongo db 啟動 init.d 腳本時執行格式錯誤

  • March 4, 2017

我已經按照將 mongod 添加為 linux 服務的連結進行操作。伺服器重啟後,mongod伺服器沒有重啟。

/etc/rc.d/init.d/mongod 文件內容:

               #!/bin/bash
           #
           # mongodb     Startup script for the mongodb server
           #
           # chkconfig: - 64 36
           # description: MongoDB Database Server
           #
           # processname: mongodb
           #

           # Source function library
           . /etc/rc.d/init.d/functions

           if [ -f /etc/sysconfig/mongodb ]; then
                   . /etc/sysconfig/mongodb
           fi

           prog="mongod"
           mongod="/usr/bin/mongod"
           mongodb_user="myUserAdmin"
           RETVAL=0

           start() {
                   echo -n $"Starting $prog: "
                   #daemon $mongod "--fork --logpath /var/log/mongodb.log --logappend 2>&1 >>/var/log/mongodb.log"
                   daemon --user=$mongodb_user $mongod "--config /etc/mongodb.conf"
                   RETVAL=$?
                   echo
                   [ $RETVAL -eq 0 ] && touch /var/lock/subsys/$prog
                   return $RETVAL
           }

           stop() {
                   echo -n $"Stopping $prog: "
                   killproc $prog
                   RETVAL=$?
                   echo
                   [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/$prog
                   return $RETVAL
           }
           reload() {
                   echo -n $"Reloading $prog: "
                   killproc $prog -HUP
                   RETVAL=$?
                   echo
                   return $RETVAL
           }

           case "$1" in
                   start)
                           start
                           ;;
                   stop)
                           stop
                           ;;
                   restart)
                           stop
                           start
                           ;;
                   condrestart)
                           if [ -f /var/lock/subsys/$prog ]; then
                                   stop
                                   start
                           fi
                           ;;
                   reload)
                           reload
                           ;;
                   status)
                           status $mongod
                           RETVAL=$?
                           ;;
                   *)
                           echo $"Usage: $0 {start|stop|restart|condrestart|reload|status}"
                           RETVAL=1
           esac

           exit $RETVAL

通過引用 /var/log/messages

顯示的錯誤是

> Mar  4 09:04:44 redhat7 systemd: Starting SYSV: MongoDB Database Server...
Mar  4 09:04:44 redhat7 systemd: Failed at step EXEC spawning /etc/rc.d/init.d/mongod: Exec format error
Mar  4 09:04:44 redhat7 systemd: mongod.service: control process exited, code=exited status=203
Mar  4 09:04:44 redhat7 systemd: Failed to start SYSV: MongoDB Database Server.
Mar  4 09:04:44 redhat7 systemd: Unit mongod.service entered failed state.
Mar  4 09:04:44 redhat7 systemd: mongod.service failed.

請幫我。

可能不是您想要的答案,但您可能會考慮稍微不同的方法。

您的說明從 2013 年開始,並且與預系統化的 RedHat 相關。你有 RedHat 7,它(AFAIK)有 systemd,我建議你使用它,而不是使用 init 腳本。

雖然我很驚訝您在安裝 mongo 時沒有放置合適的腳本,但我認為考慮將 mongo 自己的服務單元用於基於 RPM 的系統可能是有意義的(取自https://github.com/mongodb/ mongo/blob/master/rpm/mongod.service):

[Unit]
Description=High-performance, schema-free document-oriented database
After=network.target
Documentation=https://docs.mongodb.org/manual

[Service]
User=mongod
Group=mongod
Environment="OPTIONS=--quiet -f /etc/mongod.conf"
ExecStart=/usr/bin/mongod $OPTIONS run
ExecStartPre=/usr/bin/mkdir -p /var/run/mongodb
ExecStartPre=/usr/bin/chown mongod:mongod /var/run/mongodb
ExecStartPre=/usr/bin/chmod 0755 /var/run/mongodb
PermissionsStartOnly=true
PIDFile=/var/run/mongodb/mongod.pid
# file size
LimitFSIZE=infinity
# cpu time
LimitCPU=infinity
# virtual memory size
LimitAS=infinity
# open files
LimitNOFILE=64000
# processes/threads
LimitNPROC=64000
# total threads (user+kernel)
TasksMax=infinity
TasksAccounting=false
# Recommended limits for for mongod as specified in
# http://docs.mongodb.org/manual/reference/ulimit/#recommended-settings

[Install]
WantedBy=multi-user.target

您可能希望將其放入 /etc/systemd/system/mongod.service,並可能禁用您的 init 腳本。

引用自:https://serverfault.com/questions/836259