一、现象
运行Linux下的程序时,很多时候因为异常或某些不知名因素被强
退,当你重新启动时,发现系统会报一个**“ERROR! xxx is not
running, but lock file (/var/lock/subsys/xxx) exists”**的异常
可是这时明明我们刚准备启动这个程序呢?
带着几个问题来说明:
如何解决问题?
造成这种现象的某些因素?
二、如何解决问题
我们直接cd到/var/lock/subsys/目录,将xxx这个文件删除就可以了。
cd /var/lock/subsys
rm -f xxx
Note:不是删除/var/lock/subsys/这个目录,千万记住。虽然系统允许你重新创建一个
三、造成这种现象的某些因素
- 先来了解一下 /var/lock/subsys的作用
**分为两种情况**:
第一种
在Linux系统中,如果你执行了关闭系统的操作,系统会优先检查
/var/lock/subsys下的服务文件,并把这些文件对应的各个服务一一关闭。
第二种
而当我们启动一个程序时,系统也会去 /var/lock/subsys下检测是否
有对应的文件,如果没有,程序启动过程就在此目录下创建一个文件。
如果有,则可能停止启动,并报异常。
- 造成异常的因素
根据前面说到的作用,我们判断一个程序是否正在运行,的确可以通过判断此目录下的文件是否上锁来确认。
但是这个目录的内容并不能100%确定文件一定上锁了,因为很多服务在启动脚本里用touch来创建这个加锁文件。当程序异常退出是,可能未完成清除锁的操作,导致锁文件仍然存在。下次运行程序时,相当于在程序里给一个线程上两次一样的锁,本身就不合逻辑。