Bash Script не может записывать в лог файлы - PullRequest
0 голосов
/ 20 сентября 2019

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

Если я запускаю скрипт как sudo, он, похоже, работает без проблем.Как настроить доступ к этим файлам журнала для сценария?

cd /home/pi/scripts/powermonitor/
python /home/pi/powermonitor/plugpower.py > plug.log
echo -e "$(sed '1d' /home/pi/scripts/powermonitor/plug.log)\n" > plug.log
sed 's/^.\{139\}//' plug.log > plug1.log
rm plug.log
grep -o -E '[0-9]+' plug1.log > plug.log
rm plug1.log
sed -n '1p' plug.log > plug1.log
rm plug.log
perl -pe '

Ответы [ 2 ]

0 голосов
/ 20 сентября 2019

Возможность записи файла зависит от прав доступа к файлу , которые были назначены этому файлу или, если файл не существует, но вы хотите создать новый файл, тогда разрешения для каталогав котором вы хотите написать файл.Если вы используете sudo, то вы временно становитесь пользователем root, и пользователь root может читать / записывать / выполнять любой файл вообще без ограничений.

Если вы сначала запускаете скрипт с использованием sudo, и скрипт заканчиваетсясоздавая файл, этот файл, вероятно, будет принадлежать пользователю root и не будет доступен для записи обычному пользователю.Если вы запустите свой скрипт без использования sudo, он будет работать под именем пользователя, которое вы использовали для подключения к машине, и у этого пользователя должно быть разрешение на запись файлов журнала.

Вы можете изменить владельца иправа доступа к каталогам и файлам с помощью команд chown, chmod, chgrp.Если вы хотите всегда запускать свой скрипт как sudo, вам не о чем беспокоиться.Если вы хотите запускать эти команды без sudo, это означает, что вы запускаете их как какой-то другой пользователь, и вам нужно дать разрешение на запись этому пользователю, кем бы он ни был, для записи файлов / папок, куда попадают файлы журнала.Написано.

Например, если бы я хотел запустить скрипт от имени пользователя sneakyimp и хотел, чтобы файлы были записаны в / home / sneakyimp / logs /, то мне нужно было бы убедиться, что этот каталогбыл доступен для записи sneakyimp:

sudo chown -R sneakyimp:sneakyimp /home/sneakyimp/logs

Эта команда меняет владельца этого каталога и его содержимого на пользователя sneakyimp.Вам также может понадобиться запустить некоторые команды chmod, чтобы убедиться, что владелец может их записать.

0 голосов
/ 20 сентября 2019

Я был тупым.Мне просто нужно было установить права на запись в файлы журналов.

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