Вы 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"
Это функция systemd. Оригинальная команда udev
была заменена командой systemd-udevd
(см. ее man-страницу). Одно из отличий заключается в том, что она создает собственное пространство имен файловой системы, поэтому монтирование выполняется, но оно не видно в основном пространстве имен. (Вы можете проверить это, выполнив systemctl status systemd-udevd
, чтобы получить главный PID службы, а затем просмотрев содержимое /proc/
для вашей файловой системы).
Если вы хотите вернуться к общему, а не частному пространству имен файловой системы, то создайте файл /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. Я не нашел последствий этого.
Эта же проблема возникает в 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