问题描述
我已经安装了clamav
,并且想要更新用于识别病毒的文件:
$ sudo freshclam
ERROR: /var/log/clamav/freshclam.log is locked by another process
ERROR: Problem with internal logger (UpdateLogFile = /var/log/clamav/freshclam.log).
我应该怎么处理这个错误?
编辑:
$ sudo lsof /var/log/clamav/freshclam.log
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
freshclam 866 clamav 3wW REG 259,1 100134 10486045 /var/log/clamav/freshclam.log
最佳方法
简短答案:
您不必手动运行它,因为它已经自动运行并且在后台运行,这就是为什么您会收到该消息的原因。
如果要停止守护程序并手动运行它:
sudo systemctl stop clamav-freshclam.service
手动运行它:
sudo freshclam
发生了什么以及如何处理?
每次遇到类似情况时,都会出现诸如file x has been locked
或Another process is using this file : /path/to/x
之类的错误,您可以使用lsof
命令来查找哪个进程正在使用该文件(如果您运行):
sudo lsof /var/log/clamav/freshclam.log
您应该得到如下输出:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
abc 126 user 3wW REG 259,1 100 1048 /var/log/clamav/freshclam.log
abc
是使用该文件的进程的名称,在您的情况下为:freshclam
。
这意味着要运行的freshclam
已由clamav守护程序运行。
您可以使用less /var/log/clamav/freshclam.log
或类似的命令来查看发生了什么。
因此,您不必再手动运行它,这是一个避免冲突的过程,并且可以使同一进程的多个实例同时执行同一操作。
如果要使其停止并手动运行,则将SIGTERM
发送到其进程,这使该进程有机会完成其工作并干净地关闭自身,例如:
sudo pkill -15 -x freshclam
-
在这种情况下,可能需要
sudo
。 -
15:SIGTERM是默认值
然后手动运行它:
sudo freshclam
但是,在这种情况下,您可以使用:
sudo systemctl stop clamav-freshclam.service
停止守护程序。
次佳方法
sudo /etc/init.d/clamav-freshclam stop
sudo freshclam
sudo /etc/init.d/clamav-freshclam start
第三种方法
这可能是为此的另一种选择…
sudo service clamav-freshclam stop
sudo freshclam
sudo service clamav-freshclam start
希望这可以帮助…