1
在OSX 10.8.x上,我使用FSEvents檢測目錄中的更改。 問題是,當通過sftp複製文件時,不會調用FSEvents回調。
當我使用cp
複製文件(或touch
來模擬更改)時,調用回調。 我在做一些愚蠢的事情嗎?是sshd使用某種低級別的API來創建文件?我應該向蘋果公司提交一個錯誤嗎?未通過FSEvents檢測到sftp文件修改
eventQueue = dispatch_queue_create(EVENT_QUEUE_NAME, DISPATCH_QUEUE_SERIAL);
//Watch the data/apns directory (for .json files)
NSString *pathToWatch = ...
NSArray *pathsToWatch = @[pathToWatch];
CFAbsoluteTime latency = 1.0; /* Latency in seconds */
// Create the FileSystem events stream, passing in a callback
streamRef = FSEventStreamCreate(NULL,
&fscallback,
NULL,
(__bridge CFArrayRef)(pathsToWatch),
kFSEventStreamEventIdSinceNow,
latency,
kFSEventStreamCreateFlagIgnoreSelf);
if (streamRef)
{
FSEventStreamSetDispatchQueue(streamRef, eventQueue);
if (NO == FSEventStreamStart(streamRef))
{
DDLogError(@"FSEventStreamStart error");
}
else
{
DDLogError(@"FSEventStreamStart ok");
}
}
else
{
DDLogError(@"FSEventStreamCreate error");
}
我使用sshd的配置內部SFTP:
...
Subsystem sftp internal-sftp
Match Group users
PasswordAuthentication yes
AllowTCPForwarding no
X11Forwarding no
ForceCommand internal-sftp
Match User user
ChrootDirectory /vhosts/web/user
它是有道理的(種)。但你怎麼知道事件發生在chroot路徑上?如果是這樣的話,我不應該通過觀看/ foo路徑來獲取事件嗎?但它不起作用。 – FKDev
/foo也必須存在於基本文件系統中,否則事件將不會被傳送。真的,我不認爲值得努力解決這個錯誤。 –
你是對的,但現在你已經把這個想法放在我的腦海裏了,我想驗證它,以至於所有的時間都浪費在這個上面,至少會產生一個正在發生的邏輯解釋。我創建了/ foo目錄,並且給了它正確的權限,但它仍然不起作用。所以我的猜測是這只是Apple實施中的一個奇怪的邊緣案例。 – FKDev