サーバー運用をしていると、容量確保や不要ファイル消去が必ず発生します。
しかし、もしプロセスがファイルを掴んでいる時にそのファイルを削除してしまうと、プロセスがエラーを吐いてしまいます。
そんな時のために、今回はファイルを掴んでいるプロセスを確認する方法を紹介します。
逆に、プロセスが掴んでいるファイルを確認する方法に関しては、以下を参照してください。
Linuxでプロセスが掴んでいるファイルを確認する方法
Linuxサーバで「ログローテートしたいのに、プロセスが掴みっぱなしでローテーションできない」、「NFSマウント外したいのにファイルを掴みっぱなしでNFSマウントが外せない」等でプロセスが掴んでいるファイルを特定したい時の方法を紹介します。
ファイルを使用しているプロセスを確認
ファイルに対してどのプロセスが使用しているか特定するには、fuserコマンドに -v オプションを付けて確認する事が出来ます。
以下はMySQLのエラーログ(/var/log/mysqld.log)に対して、fuserコマンドを実行した結果となり、mysqldプロセスがファイルを使用していることが確認できます。
どのユーザが、どのプロセス(PIDも含め)でファイルを使用しているか特定できます。
[root@cent77 ~]# fuser -v /var/log/mysqld.log
USER PID ACCESS COMMAND
/var/log/mysqld.log: mysql 1122 F.... mysqld
fuserコマンドが存在しない場合は、psmisc パッケージをインストールしてください。
CentOS7のDVDインストールメディア(isoファイル)に入っています。
[root@cent77 ~]# yum install psmisc
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* c7-media:
c7-media | 3.6 kB 00:00:00
Resolving Dependencies
--> Running transaction check
---> Package psmisc.x86_64 0:22.20-16.el7 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
========================================================================================================================
Package Arch Version Repository Size
========================================================================================================================
Installing:
psmisc x86_64 22.20-16.el7 c7-media 141 k
Transaction Summary
========================================================================================================================
Install 1 Package
Total download size: 141 k
Installed size: 475 k
Is this ok [y/d/N]: y
Downloading packages:
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Installing : psmisc-22.20-16.el7.x86_64 1/1
Verifying : psmisc-22.20-16.el7.x86_64 1/1
Installed:
psmisc.x86_64 0:22.20-16.el7
Complete!
ファイルシステムを使用しているプロセスを特定する方法
fuserコマンドはファイルからのプロセス特定のみでなく、ファイルシステムに対しても、どのプロセスが使用しているかを特定することが可能です。
例えば、NFSマウントを外したい時に外れない時は、NFSを使用しているプロセスを特定し、停止やkillした後にNFSをアンマウントします。
fuserコマンドのオプションは -vm となります。
[root@cent77 ~]# fuser -vm /nfs_srv
USER PID ACCESS COMMAND
/nfs_srv: dekien 1459 .rce. sshd
dekien 1460 .rce. bash