我在我的网络服务器上发现一个反复出现的问题:
[Sun May 16 03:10:19 2010] [crit] (28)No space left on device: mod_rewrite: could not create rewrite_log_lock
Configuration Failed
[Sun May 16 04:10:05 2010] [crit] (28)No space left on device: mod_rewrite: could not create rewrite_log_lock
Configuration Failed
[Sun May 16 05:10:04 2010] [crit] (28)No space left on device: mod_rewrite: could not create rewrite_log_lock
Configuration Failed
[Sun May 16 05:17:13 2010] [crit] (28)No space left on device: mod_rewrite: could not create rewrite_log_lock
Configuration Failed
到目前为止,我发现发生这种情况时的唯一解决方法是重新启动服务器。这不是理想的做法 :-\
重新启动httpd
并不能清除错误。df
表示我有 20+ GB 的可用空间,并且top
和可用空间都报告 800+ MB(或 1.2 GB)
> df -h
Filesystem Size Used Avail Use% Mounted on
/dev/simfs 40G 18G 23G 44% /
#
> free
total used free shared buffers cached
Mem: 1474560 300832 1173728 0 0 0
-/+ buffers/cache: 300832 1173728
关于为什么这种情况会再次发生,以及如何预防/修复它,您有什么想法吗?
答案1
http://devtime.blogspot.com/2008/02/apache-error-no-space-left-on-device.html
Apache 错误:设备上没有剩余空间
Apache 无法启动,错误日志包含:
[emerg] (28)No space left on device: Couldn't create accept lock
或者
[crit] (28)No space left on device: mod_rewrite: could not create rewrite_log_lock Configuration Failed
检查磁盘后,显示空间充足。问题是 apache 没有正确关闭,留下了大量信号量数组,由“apache”用户拥有。
跑步:
ipcs -s | grep apache
立即删除这些信号量应该可以解决问题并允许 apache 启动。
ipcs -s | grep apache | perl -e 'while () { @a=split(/\s+/); print `ipcrm sem $a[1]`}'
apache 进程的所有者在哪里apache
,如果这不是服务器上的用户的名称,请更改它。
答案2
使用 awk 更简单:
for id in $(ipcs -s | grep 'apache'| awk '{ print $2 }'); do ipcrm sem $id; done
答案3
xargs 似乎对我不起作用,因此在 bash 中我改为执行以下操作:
对于 x 在ipcs -s | grep apache | cut -b11-22
;执行 ipcrm -s $x;完成