2012-01-23 61 views
4

我需要確定一個正在定期寫入日誌文件的守護進程。問題是,我不知道哪個流程正在完成這項工作,而且我需要在明天之前向客戶展示一些進展。任何人都有任何線索?如何識別哪個守護進程正在寫入文件

我已經在PPID的幫助下整理了系統中運行的守護進程。任何幫助,將不勝感激。

此外,我認爲一個守護進程可能(很少)沒有PPID爲1.我們如何才能找到它?

回答

4

lsof給出了一個打開文件的列表與進程。 所以lsof | grep <filename>應該可以幫到你。

+0

顯然lsof不可用系統我的客戶已安裝。 Solaris 8. –

5

在日誌文件上嘗試使用fuser命令,該命令將顯示使用它的進程的PID。

例子:

$ fuser file.log 
file.log: 3065 
+0

但是,只有在進程保持文件打開的情況下才有效嗎?如果該過程只在寫入數據時打開文件會怎麼樣? –

+0

如果您不知道進程寫入日誌的時間,可以使用'watch'定期執行'fuser'。例如'看fuser file.log'。 – dogbane

+0

這可能是可以的,好吧..我會嘗試。問題是我沒有寫權限,所以無法將手錶的輸出重定向到任何文件。讓我們看看可以做些什麼。非常感謝你們。 –

0

您可以使用AUDITCTL。

# sudo apt-get install auditd 
# sudo /sbin/auditctl -w /path/to/file -p war -k hosts-file 
-w watch /etc/hosts 
-p warx watch for write, attribute change, execute or read events 
-k hosts-file is a search key. 
# sudo /sbin/ausearch -f /path/to/file | more 

給出輸出諸如

類型=未知[1327]味精=審計(1459766547.822:130):proctitle = 2F7573722F7362696E2F61706163686532002D6B007374617274 類型= PATH味精=審計(1459766547.822:130):項= 0名=「/ path/to/file」inode = 141561 dev = 08:00 mode = 0100444 ouid = 33 ogid = 33 rdev = 00:00 nametype = NORMAL type = CWD msg = audit(1459766547.822:130):cwd =「 /「 type = SYSCALL msg = audit(1459766547.822:130):arch = c000003e syscall = 2 success = yes exit = 41 a0 = 7f3c23034cd0 a1 = 80000 a2 = 1b6 a3 = 8 items = 1 ppid = 24452 pid = 6797 auid = 42949672 95 uid = 33 gid = 33 euid = 33 suid = 33 fsuid = 33 eg id = 33 sgid = 33 fsgid = 33 tty =(none)ses = 4294967295 comm =「apache2」exe =「/ usr/sbin/apache2」key =「hosts-file」

+0

'sudo/sbin/auditctl -D'可以關閉。 –