inotify非同步檔案實時監控

2021-08-31 00:02:10 字數 1689 閱讀 1810

inotify是linux核心提供的一組系統呼叫,它可以監控檔案系統操作,比如檔案或者目錄的建立、讀取、寫入、許可權修改和刪除等。

inotify使用也很簡單,使用inotify_init建立乙個控制代碼,然後通過inotify_add_watch/inotify_rm_watch增加/刪除對檔案和目錄的監聽。

php中提供了inotify擴充套件,支援了inotify系統呼叫。inotify本身也是乙個檔案描述符,可以加入到事件迴圈中,配合使用swoole擴充套件,就可以非同步非阻塞地實時監聽檔案/目錄變化。

如果已經安裝了inotify/swoole可以跳過此步驟。

pecl install swoole

pecl install inotify

操作成功後,修改php.ini,加入

extension=swoole.so

extension=inotify.so

檢視擴充套件是否載入成功:

php -m | grep swoole

php -m | grep inotify

首先在當前目錄建立乙個inotify.data檔案,示例就用來監聽此檔案。

//建立乙個inotify控制代碼

$fd = inotify_init();

//監聽檔案,僅監聽修改操作,如果想要監聽所有事件可以使用in_all_events

$watch_descriptor = inotify_add_watch($fd, __dir__.'/inotify.data', in_modify); 

while (true) 

}}//釋放inotify控制代碼

inotify_rm_watch($fd, $watch_descriptor);

fclose($fd);

修改inotify.data,就可以看到程式輸出了資訊。

echo "hello world" > inotify.data

inotify event :array (

'wd' => 1,

'mask' => 2,

'cookie' => 0,

'name' => '',

)

//建立乙個inotify控制代碼

$fd = inotify_init();

//監聽檔案,僅監聽修改操作,如果想要監聽所有事件可以使用in_all_events

$watch_descriptor = inotify_add_watch($fd, __dir__.'/inotify.data', in_modify);

//加入到swoole的事件迴圈中

swoole_event_add($fd, function ($fd) 

}});

這裡使用了swoole擴充套件提供swoole_event_add函式,將inotify控制代碼設定為非阻塞,並加入到epoll事件迴圈中。程式變成非同步非阻塞模式。當有事件發生時才會執行inotify_read獲取事件。沒有事件發生時,程式可以執行其他的邏輯。

此程式與上乙個同步阻塞例子的邏輯是相同的,向inotify寫入內容時也會列印事件資訊。區別在於swoole+inotify的程式是非同步的。可以支援併發監聽大量檔案和目錄,並且除了inotify操作之外還可以執行其他的io操作。

inotify監控軟體 實時同步

建立乙個檔案描述符,附加乙個或多個監視器 乙個監視器 是乙個路徑和一組事件 然後使用 read 方法從描述符獲取事件。確認epel源可以使用 yum y install inotify tools usr bin inotifywait 監控資料變化命令 預設監控一次 語法結構 inotify 引數...

基於inotify的檔案監控方案

最近在做乙個linux上的檔案監控程式,2.6核心提供了inotify機制,這僅僅是個機制,任何策略都必須自己實現,這一點從inotify不提供遞迴介面就可以看出來,如果我實時監控到目錄被建立,那麼馬上將這個新目錄加入監控表,這個想法是最初的想法,也是最直接的想法,可是仔細推敲一下就會發現這個實現有...

基於inotify的檔案監控方案

最近在做乙個linux上的檔案監控程式,2.6核心提供了inotify機制,這僅僅是個機制,任何策略都必須自己實現,這一點從inotify不提供遞迴介面就可以看出來,如果我實時監控到目錄被建立,那麼馬上將這個新目錄加入監控表,這個想法是最初的想法,也是最直接的想法,可是仔細推敲一下就會發現這個實現有...