Правило Udev для монтирования диска не работает

Вы sudo используете только команду ls , но не ] регистратор . Bash не знает (и не должен) знать, что делает sudo , поэтому он просто передает две команды по конвейеру. Первый - это sudo , а второй - logger . Неважно, если вы sudo ls , logger этого не сделаете.

Вам следует sudo logger , но он не будет работать, потому что это функция Bash, а не исполняемый файл, который должен выполняться sudo .

ОСТОРОЖНО : ls | sudo logger вызовет / usr / bin / logger , если он установлен в вашей системе. Помните: sudo не знает о функциях Bash.

Я бы посоветовал вам добавить пользователя, вызывающего ваш скрипт, в группу владельца файла, чтобы вы могли писать в него без особого повышения привилегий.

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

function logger() {
  while read data
  do
    echo "$data"
  done
  return 0
} >>"$logfile"
9
13.12.2016, 21:47
2 ответа

Это функция systemd. Оригинальная команда udev была заменена командой systemd-udevd (см. ее man-страницу). Одно из отличий заключается в том, что она создает собственное пространство имен файловой системы, поэтому монтирование выполняется, но оно не видно в основном пространстве имен. (Вы можете проверить это, выполнив systemctl status systemd-udevd, чтобы получить главный PID службы, а затем просмотрев содержимое /proc//mountinfo для вашей файловой системы).

Если вы хотите вернуться к общему, а не частному пространству имен файловой системы, то создайте файл /etc/systemd/system/systemd-udevd.service с содержимым

.include /usr/lib/systemd/system/systemd-udevd.service
[Service]
MountFlags=shared 

или новый каталог и файл /etc/systemd/systemd-udevd.service.d/myoverride.conf только с последними 2 строками, т.е.

[Service]
MountFlags=shared

и перезапустите службу systemd-udevd. Я не нашел последствий этого.

20
27.01.2020, 20:04

Эта же проблема возникает в Ubuntu 18.04 по той же причине. Чтобы исправить это, мы создаем файл переопределения дляsystemd-udevd:

sudo systemctl edit systemd-udevd

И вставить в него:

[Service]
MountFlags=shared

(в Ubuntu 20.04 замените MountFlags=sharedна PrivateMounts=no.)

Сохраните файл, а затем выполните:

sudo systemctl daemon-reload
sudo service systemd-udevd --full-restart
18
27.01.2020, 20:04

Теги

Похожие вопросы