记录一次排除mongodb bug的过程。
又是 debug,debug,debug,不想学习的一天!~ ~
由于从MongoDB 4.2开始,db.collection.update()可以使用聚合管道进行更新,所以我觉定将mongodb从3.6升级到4.4。。。。。。通过官网给出的方法下载 mongodbapt-get install -y mongodb-org
后,发现不能用 service 命令启动,打开/etc/init.d/
后发现没有 service 文件,于是决定自己写个,凑合用。
最后服务器上的好不容易更新完了,mac上的又坏了。。。这里记一下解决方法。。
将文件夹设置成可写状态(不设置则异常退出时无法修改导致不能使用)
1 | sudo chown -R `id -un` /data/db |
ubuntu service 文件
编写服务文件,就和编写.sh 脚本一样。
1 | # 先导入一个函数库,(包括了 log_daemon_msg, log_end_msg函数, 这两个函数相当于一个UI,status_of_proc返回进程的状态) |
log_daemon_msg, log_end_msg

UI讲完了,来讲下service文件最重要的一个函数,start-stop-daemon
它可以启动和停止系统守护程序
介绍几个常用参数。
- 启动
- –start 表示启动系统守护程序
- –pidfile 表示程序启动后进程pid的存放文件(通常放在
/run
中) - -m 和 –pidfile 搭配使用,如果pidfile指定的文件不存在,就创建一个文件。
- -q 表示不要输出警告
- –exec 启动程序的命令 (如果遇到指令,例如本文的
mongod -f
这个-f就需要写成--'f'
)
- 停止
- –stop 表示停止系统守护进程
- –pidfile 指定要停止进程的pidfile
接下来在说一下status_of_proc
这个函数,它可以判断一个进程的状态。当我们执行service --status-all
时可以看到所有进程的开关状态,其中就是使用了这个函数。
这个函数有三个参数比较重要
- -p 存放该进程pid的文件
- $1 程序的路径
- $2 执行
service mongodb status
时,显示的名称
-p 和 $1只要有一个正确好像就能正确使用,但最好是都写上。(就到这吧。。。不想看那个init-functions函数库了)