/var/run/*.pid already exist. Daemon already running?

来源:互联网 发布:修道入门 知乎 编辑:程序博客网 时间:2024/05/21 19:12

如题,我遇到的一个问题,这个问题的产生是因为非正常结束进程服务造成,比如突然断电等,我的操作就是pkill -9 server_name 造成的。

我反复的执行启动和停止服务的命令,但是用ps查看进程时,是没有成功的。后来 在网上看到重启服务器的命令,我就拿来搞了shutdown -h now ,我个二货,等了10分钟,再去连服务器的时候,总是连不上,忽然发现,麻蛋,我执行的是关机命令,而不是reboot,sb了。。。有种被大鹅支配的恐惧。赶紧找机房同事去把服务器点亮!

重连上服务器后,依然是这个问题,进程没有起来。然后在网上看到了一下内容

(1) pid文件的内容:pid文件为文本文件,内容只有一行, 记录了该进程的ID。 用cat命令可以看到。 (2) pid文件的作用:防止进程启动多个副本。只有获得pid文件(固定路径固定文件名)写入权限(F_WRLCK)的进程才能正常启动并把自身的PID写入该文件中。其它同一个程序的多余进程则自动退出。 (3) 编程技巧:     调用fcntl设置pid文件的锁定F_SETLK状态,其中锁定的标志位F_WRLCK。     如果成功锁定,则写入进程当前PID,进程继续往下执行。     如果锁定不成功,说明已经有同样的进程在运行了,当前进程结束退出。 

我看到了关键写入权限 , 我赶紧去/var/run/ 下创建了一个a.pid文件,然后赋给他权限chmod 777 a.pid 然后,执行了一下启动服务的命令,结果成功了。

这时,我再去看看这个a.pid文件,里面已经有进程id了。问题解决!

阅读全文
0 0