Ошибка чтения файла блокировки
Ошибки «E: Не удалось получить доступ к файлу блокировки /var/lib/apt/lists/lock - open (11: Resource temporarily unavailable)» и «E: Невозможно заблокировать каталог /var/lib/apt/lists/»
Пакеты (программы) в Linux можно устанавливать и обновлять с использованием графического интерфейса, либо с помощью утилит командной строки.
Иногда при использовании утилитой apt (консольного менеджера пакетов), например, при обновлении информации о пакетах, либо про попытке установить новый пакет, возникает примерно следующая ошибка:
Ошибка довольно раздражающая, она может возникнуть сразу после загрузки системы или в любое произвольное время.
Вряд ли вы сами запустили в двух разных окнах программу apt. Дело в том, что у apt имеется свой демон (фоновый процесс), который в некоторых дистрибутивах установлен на автоматическое выполнение. Т.е. чаще всего вы сталкиваетесь с этой ошибкой в тот момент, когда apt выполняет свои фоновые процессы. Это не является большой редкостью, поскольку работа демона apt может быть продолжительной, например, когда нужно скачать большое количество обновлений, а Интернет-подключение медленное.
Если в этой ситуации удалить файлы-блокировщики (/var/lib/apt/lists/lock), как это иногда советуют, то в результате фоновый процесс apt преждевременно завершит свою работу, либо вы запустите второй экземпляр apt – оба эти варианта приведут к проблемам с пакетами, и, вероятнее всего, при последующей попытке использовать apt система предложит вам запустить программу с ключом -f:
Как отключить автоматический запуск службы apt
Тем не менее, ситуацию с apt многие пользователи, и я в том числе, могут найти раздражающей: мы не можем воспользоваться apt, в том числе установить нужный пакет в тот момент, когда нам это нужно и, возможно, нет времени дожидаться, пока apt завершит свою работу.
Чтобы увидеть, какие службы apt присутствуют в системе, выполните команду:
Вероятно, вы увидите там такие службы как:
- apt-daily.timer – ежедневный таймер службы для скачивания новых пакетов
- apt-daily-upgrade.timer – ежедневный таймер службы для обновления и очистки пакетов
- apt-daily.service – непосредственно запускает скачивание новых пакетов (команда /usr/lib/apt/apt.systemd.daily update), вызывается таймером
- apt-daily-upgrade.service – непосредственно запускает установку новых пакетов и очистку кэша (команда /usr/lib/apt/apt.systemd.daily install), вызывается таймером
Следующая команда выведет только список служб apt, которые добавлены в автоматическую загрузку:
Скорее всего, это службы apt-daily-upgrade.timer и apt-daily.timer, чтобы отключить их автоматический запуск при старте системы, выполните команды:
Отключение unattended-upgrades
Кроме автоматического запуска apt, в системах на базе Debian имеются включенные по умолчанию unattended-upgrades – те же самые автоматические обновления.
Из описания данного пакета непонятно, автоматически устанавливаются только критические обновления, связанные с безопасностью, или все.
Для изменения этих настроек можно отредактировать файл /etc/apt/apt.conf.d/20auto-upgrades, в нём имеются следующие строки:
Первая отвечает за обновление списка пакетов, а вторая – за обновления самих пакетов в системе. Этот файл можно изменить вручную (чтобы остановить автоматическое обновление, вместо 1 впишите 0) либо запустить конфигуратор:
Переключения между кнопками, используйте клавишу <TAB>, для выбора используйте <ENTER>.
Что характерно, в Kali Linux по умолчанию отключены автоматические службы apt как и вообще все сетевые службы, которые так или иначе используют доступ в сеть, но почему-то включены unattended-upgrades – либо авторы известного дистрибутива забыли о них, либо считают эти обновления важными.
Отключение автоматической загрузки обновлений программ в GNOME 3
Если там будет true, значит автоматическая загрузка обновлений включена.
Чтобы её отключить выполните:
Как обновить Linux в командной строке
С одной стороны, отключение автоматических обновлений и скачивание новых файлов пакетов навсегда избавит вас от ошибки «E: Невозможно заблокировать каталог /var/lib/apt/lists/» и других подобных, но при этом вам нужно будет самостоятельно выполнять обновление и очистку пакетов.
Для полного обновления системы выполняйте:
А для очистки пакетов используются команды:
Аварийное завершение работы во время обновления системы или установки программ
Если рассматриваемая ошибка была вызвана тем, что система была выключена во время обновления, то для её исправления нужно выполнить:
Скорее всего, чтобы вновь появилась возможность использовать apt понадобиться выполнить следующую команду, для исправления проблем:
Заключение
Если вы постоянно используете apt в командной строке, то вряд ли нужна автоматическая служба apt. Если же вы выполняете какую-то инструкцию и случайно столкнулись с описанной ошибкой, то, наверное, правильнее не удалять демон apt, а просто дождаться когда он корректно завершит свою работу.
Как сделать блокировку на чтение файла в php во время чтения?
В разделяемой блокировке меня смущает слово "разделяемая".
Вадим Егоров: В документации все описано.
"PHP поддерживает портируемый способ консультативной блокировки (adviosory locking) полностью всего файла (что означает, что все программы, осуществляющие доступ к файлу, должны использовать один и тот же способ блокировки, иначе блокировка не будет работать). По умолчанию, данная функция будет ждать получения блокировки; это поведение можно изменить с помощью описанного ниже параметра LOCK_NB."
Вызов flock($fp, LOCK_EX) не вернет истину, если блокировка установлена. Соответственно, Вам нужно читать из файла, когда процессу удалось произвести блокировку файла. Это означает, что в данный момент он свободен.
Леша Киселев: я пытался делать так:
index.php (на белом сервере; вызывает пользователь)
оказывается ничего он не ждет, а просто выдает ошибку
Вадим Егоров:
"оказывается ничего он не ждет, а просто выдает ошибку"
Из доки:
"Также возможно добавить константу LOCK_NB в качестве битовой маски к любой из вышеуказанных операций, если вы не хотите ждать пока flock() получит блокировку."
разве это ничего не значит
LOCK_SH для получения разделяемой блокировки (чтение).
LOCK_EX для получения эксклюзивной блокировки (запись).
Леша Киселев: что за бред??
вообще обьясняли что такое flock рукожопы какие-то
масло масленое
wouldblock
Необязательный третий параметр будет установлен в 1, если блокировка будет блокирующей (код ошибки EWOULDBLOCK). (не поддерживается на Windows)
Вадим Егоров: Да, сорян, проглядел. Очевидно, что вы хотите сделать эксклюзивную блокировку, что бы другой процесс не смог записать данные в файл. Соответсвенно, нужно блокировать файл на запись!
Другой процесс перед записью, должен попытаться поставить точно такую же блокировку!
flock($f, LOCK_EX | LOCK_NB);
Вадим Егоров:
"LOCK_NB чтобы не ждать, пока будет получена блокировка (не поддерживается в Windows)." Внимание на инфу по винде.
И да, файл стоит открывать с режимом "rw+", т.к.
"Из-за того, что функции flock() необходим указатель на файл, вам может понадобиться воспользоваться специальным запирающим файлом для того, чтобы ограничить доступ к файлу, который вы намерены очищать, путём его открытия в режиме записи (используя "w" или "w+" в качестве аргумента функции fopen())."
Ошибка, связанная с недостаточными правами пользователя, может возникнуть после того, как в системе заведен новый пользователь. У каждого пользователя 1С на программном уровне есть определенные права доступа. Такой набор прав называется ролью, а определяется он в конфигураторе. Если используется клиент-серверная версия программы, установка прав осуществляется на уровне сервера SQL.
При использовании варианта "файл-сервер" права доступа сотрудников настраиваются непосредственно в базе данных. Однако в данном случае сервер базы данных отсутствует в принципе, поэтому ответственность за соблюдение прав доступа лежит на самой программе.
Но стабильная работа 1С не обеспечивается только настройкой прав на уровне программы. Связано это с тем, что доступ к базе данных, как и к любому другому типу файлов, регламентируется путем настройки прав на уровне операционной системы. Ошибка открытия файла блокировок может возникать, если таких прав недостаточно. В данном случае речь идет о файле 1Cv8.1CL, находящемся внутри базы 1Cv8.1CD.
Соответственно, для того, чтобы пользователь смог полноценно работать с файлом, он должен получить ряд разрешений. Для этого необходимо открыть окно свойств папки или файла и перейти на вкладку "Безопасность". Чтобы сделать этот процесс проще и не тратить время на изменение свойств файлов и папок для каждого сотрудника отдельно, администратор может создать новую группу пользователей, которой будут предоставлены соответствующие права, а также открыт доступ к системным папкам AppData и Temp (которые тоже зачастую вызывают определенные проблемы). В дальнейшем достаточно просто добавлять в эту группу необходимые рабочие места.
Антивирусное ПО
Пользователи некоторых редакций операционных систем семейства Windows заметили, что их брандмауэры могут блокировать удаленный доступ к базе данных 1С. Аналогичная ситуация возникает с антивирусом "Kaspersky". Во избежание подобных проблем файл 1Cv8.1CD необходимо внести в список исключений брандмауэра Windows и антивирусной программы.
Остались вопросы? Мы с радостью поможем Вам в их решении.
Читайте также: