Linuxサーバで「ログローテートしたいのに、プロセスが掴みっぱなしでローテーションできない」、「NFSマウント外したいのにファイルを掴みっぱなしでNFSマウントが外せない」等でプロセスが掴んでいるファイルを特定したい時の方法を紹介します。
逆に、ファイルを使用しているプロセスを特定する方法に関しては、以下の記事を参照してください。
プロセスのPIDを調べる
今回はMySQLのmysqldプロセスを例に、掴んでいるファイルを確認します。
まずはpsコマンドとgrepコマンドでプロセスのPIDを調べます。
以下だと 1464 がPIDになります。
[root@cent77 ~]# ps -ef |grep mysql |grep -v grep
mysql 1464 1 0 14:27 ? 00:00:02 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid
プロセスが掴んでいるファイルを確認する
プロセスが掴んでいるファイルを調べるには、 /proc/<PID>/fd 配下をlsします。
fdはファイルディスクリプタの略です。
[root@cent77 ~]# ls -l /proc/1464/fd
total 0
lr-x------ 1 mysql mysql 64 Mar 29 15:11 0 -> /dev/null
l-wx------ 1 mysql mysql 64 Mar 29 15:11 1 -> /var/log/mysqld.log
lrwx------ 1 mysql mysql 64 Mar 29 15:11 10 -> /var/lib/mysql/ibdata1
lrwx------ 1 mysql mysql 64 Mar 29 15:11 11 -> /var/lib/mysql/ibtmp1
lrwx------ 1 mysql mysql 64 Mar 29 15:11 12 -> /tmp/ibaTWJHq (deleted)
lrwx------ 1 mysql mysql 64 Mar 29 15:11 13 -> /var/lib/mysql/mysql/plugin.ibd
lrwx------ 1 mysql mysql 64 Mar 29 15:11 14 -> /var/lib/mysql/mysql/innodb_table_stats.ibd
lrwx------ 1 mysql mysql 64 Mar 29 15:11 15 -> /var/lib/mysql/mysql/help_topic.ibd
lrwx------ 1 mysql mysql 64 Mar 29 15:11 16 -> /var/lib/mysql/mysql/help_relation.ibd
lrwx------ 1 mysql mysql 64 Mar 29 15:11 17 -> /var/lib/mysql/mysql/help_keyword.ibd
lrwx------ 1 mysql mysql 64 Mar 29 15:11 18 -> /var/lib/mysql/sys/sys_config.ibd
lrwx------ 1 mysql mysql 64 Mar 29 15:11 19 -> /var/lib/mysql/mysql/innodb_index_stats.ibd
l-wx------ 1 mysql mysql 64 Mar 29 15:11 2 -> /var/log/mysqld.log
lrwx------ 1 mysql mysql 64 Mar 29 15:11 20 -> /var/lib/mysql/mysql/gtid_executed.ibd
lrwx------ 1 mysql mysql 64 Mar 29 15:11 21 -> socket:[19909]
lrwx------ 1 mysql mysql 64 Mar 29 15:11 22 -> socket:[19910]
lrwx------ 1 mysql mysql 64 Mar 29 15:11 23 -> /var/lib/mysql/mysql/server_cost.ibd
lrwx------ 1 mysql mysql 64 Mar 29 15:11 24 -> /var/lib/mysql/mysql/engine_cost.ibd
lrwx------ 1 mysql mysql 64 Mar 29 15:11 25 -> /var/lib/mysql/mysql/user.MYI
lrwx------ 1 mysql mysql 64 Mar 29 15:11 26 -> /var/lib/mysql/mysql/user.MYD
lrwx------ 1 mysql mysql 64 Mar 29 15:11 27 -> /var/lib/mysql/mysql/db.MYI
lrwx------ 1 mysql mysql 64 Mar 29 15:11 28 -> /var/lib/mysql/mysql/db.MYD
lrwx------ 1 mysql mysql 64 Mar 29 15:11 29 -> /var/lib/mysql/mysql/proxies_priv.MYI
lrwx------ 1 mysql mysql 64 Mar 29 15:11 3 -> /var/lib/mysql/ib_logfile0
lrwx------ 1 mysql mysql 64 Mar 29 15:11 30 -> /var/lib/mysql/mysql/proxies_priv.MYD
lrwx------ 1 mysql mysql 64 Mar 29 15:11 31 -> /var/lib/mysql/mysql/time_zone_leap_second.ibd
lrwx------ 1 mysql mysql 64 Mar 29 15:11 32 -> /var/lib/mysql/mysql/time_zone_name.ibd
lrwx------ 1 mysql mysql 64 Mar 29 15:11 33 -> /var/lib/mysql/mysql/time_zone.ibd
lrwx------ 1 mysql mysql 64 Mar 29 15:11 34 -> /var/lib/mysql/mysql/time_zone_transition_type.ibd
lrwx------ 1 mysql mysql 64 Mar 29 15:11 35 -> /var/lib/mysql/mysql/time_zone_transition.ibd
lrwx------ 1 mysql mysql 64 Mar 29 15:11 36 -> /var/lib/mysql/mysql/tables_priv.MYI
lrwx------ 1 mysql mysql 64 Mar 29 15:11 37 -> /var/lib/mysql/mysql/tables_priv.MYD
lrwx------ 1 mysql mysql 64 Mar 29 15:11 38 -> /var/lib/mysql/mysql/columns_priv.MYI
lrwx------ 1 mysql mysql 64 Mar 29 15:11 39 -> /var/lib/mysql/mysql/columns_priv.MYD
lrwx------ 1 mysql mysql 64 Mar 29 15:11 40 -> /var/lib/mysql/mysql/procs_priv.MYI
lrwx------ 1 mysql mysql 64 Mar 29 15:11 41 -> /var/lib/mysql/mysql/procs_priv.MYD
lrwx------ 1 mysql mysql 64 Mar 29 15:11 42 -> /var/lib/mysql/mysql/servers.ibd
lrwx------ 1 mysql mysql 64 Mar 29 15:11 43 -> /var/lib/mysql/mysql/event.MYI
lrwx------ 1 mysql mysql 64 Mar 29 15:11 44 -> /var/lib/mysql/mysql/event.MYD
lrwx------ 1 mysql mysql 64 Mar 29 15:11 45 -> /var/lib/mysql/mysql/user.MYD
lrwx------ 1 mysql mysql 64 Mar 29 15:11 5 -> /tmp/ibBSNuBZ (deleted)
lrwx------ 1 mysql mysql 64 Mar 29 15:11 6 -> /tmp/ibIvMncG (deleted)
lrwx------ 1 mysql mysql 64 Mar 29 15:11 7 -> /tmp/ibvRXgNm (deleted)
lrwx------ 1 mysql mysql 64 Mar 29 15:11 8 -> /tmp/ibCMxU1J (deleted)
lrwx------ 1 mysql mysql 64 Mar 29 15:11 9 -> /var/lib/mysql/ib_logfile1