如题,我遇到的一个问题,这个问题的产生是因为非正常结束进程服务造成,比如突然断电等,我的操作就是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了。问题解决!