Явно тайм-аут чтения операции ввода-вывода файла в PHP в Linux? - PullRequest
0 голосов
/ 22 мая 2019

У меня есть рабочий сценарий, который копирует и переименовывает файлы из одного подключенного сетевого ресурса в другой (оба CIFS), и иногда функция copy зависает на неопределенный срок при считывании ввода-вывода, переводя процесс в непрерывный режим сна, где его можно только уничтожитьс SIGKILL. (К счастью, TASK_KILLABLE, по-видимому.)

Поскольку операция блокируется при вызове copy, я не могу корректно обработать сбой ввода-вывода и, что более важно, зарегистрировать его.

$res = copy("/path/to/mount/file.pdf", "/path/to/productionqueue/newfile.pdf");

//This doesn't run because of the process state.
if($res) {
  //Report success to the log.
} else {
  //Report failure to the log.
}

Это среда, проблема, связанная с файлом, и ручное вмешательство может исправить ее, но мне нужно зарегистрировать ошибку, чтобы администратор мог быть уведомлен об этом состоянии.(Помимо: я думаю, что это состояние блокировки гонки. Я могу решить эту проблему, размонтировав и повторно установив исходный ресурс, но воспроизвести его немного проблематично.)

В идеале мне бы хотелось copy вызов тайм-аута через 10 секунд, так что я могу записать ошибку, но, похоже, в PHP нет способа сделать это.

Что я рассматриваю, так это делегирование операций копирования или чтения вПодпроцесс отслеживается командой timeout и отвечает на основании кодов завершения, но есть ли в сценарии PHP более простой способ обработки такого сценария?

Все, что я нашел в своем поиске, предполагает, что есть толькоКонфигурация времени выполнения доступна для сокетов / сетевых таймаутов, а не вызовов файловой системы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...