Udev не выполнит некоторые строки в моем скрипте

238
JeromeLEKIEFFRE

Я работаю над Beaglebone Black под Debian. Я пишу правила Udev для управления картой µSD. Что нужно сделать Udev: когда мой µSD подключен, подключите µSD /media/sdcard(он работает) и выполните скрипт, который выполняет:

  • Остановите rsyslog.service (это делает)
  • Переместить / var / log в / media / sdcard (это НЕ)
  • создайте ссылку из / var / log на / media / sdcard / log (для продолжения записи в журнал, но на SD-карте) (это не так, но / media / sdcard / log не существует, поскольку предыдущий шаг не удался)
  • перезапустите службу rsyslog (она работает)

Вот скрипт, который делает то, что я только что описал:

logger 'Enterring /root/ServolineScripts/LogsonSDcard.sh script' logger 'Refreshing Mountinglogs' sudo rm /var/log/Mountinglogs.log logger 'Stopping syslog service' sudo /etc/init.d/rsyslog stop sudo mv /var/log /media/sdcard/ sudo ln -s /media/sdcard/log /var/log sudo /etc/init.d/rsyslog start logger 'Successfully restarted rsyslog, logs are back on syslog!' logger 'Restarted syslog service' logger 'Quitting /root/ServolineScripts/LogsonSDcard.sh script' 

Я не уверен, почему он не перемещает каталог / var / log. Этот же скрипт выполняется вручную с помощью простого sh /root/ServolineScripts/LogsonSDcard.sh ...

Интересно, это проблема прав ...

0
Черт возьми, почему так много звонков sudo? `udev` запускает свои скрипты с правами суперпользователя, ему не нужно никакого` sudo`. И `sudo 'может легко не делать то, что вы, якобы, ожидаете в общем случае. Я имею в виду, пожалуйста, прекратите бездумно копировать любую ерунду, которую вы видите в случайных сообщениях в блоге; вложите огромное количество мыслей в то, что вы реализуете. kostix 6 лет назад 0
ОК, я отвлекся. Теперь к вашей реальной проблеме. Если вы удалите все эти префиксы sudo, это сработает? Другой возможный подход состоит в том, чтобы иметь скрипт-обертку, который будет запускать другой скрипт, содержащий только операторы «action» и не требующий вызовов logger, и направлять оба его выходных потока в «logger» (который может использовать входные данные на своем stdout). Что-то вроде `script_which_does_stuff 2> & 1 | logger -t microsd` kostix 6 лет назад 0
вы правы с чрезмерным использованием sudo;) Я не подумал, что Udev выполнялся от имени root ... (глупый мальчик!) Хорошо, у меня уже была идея сделать сценарий действий, и мне было интересно, почему он должен работать .. но я на этом! Спасибо! я вернусь, когда это сработает (надеюсь ...) JeromeLEKIEFFRE 6 лет назад 0
Я вернулся, и это работает намного лучше без sudo! ;) И с двумя отдельными скриптами. @kostix у вас есть объяснение, почему он работает с двумя разными скриптами, а не с одним? JeromeLEKIEFFRE 6 лет назад 0
Я не. Но я думаю, что исключение `sudo` может быть единственной причиной, по которой это работает ;-) kostix 6 лет назад 0
у меня просто есть еще одна странная вещь ... я сделал копирование и вставку в различные функции, которые я вызываю в моем основном скрипте, но когда скрипт создает ссылку из / var / log на / media / sdcard / log, результатом является ссылка в / media / sdcard / log to / media / sdcard / log ... очень странно, потому что выполняемый вручную первый скрипт, который я написал в своем посте, работал отлично ... JeromeLEKIEFFRE 6 лет назад 0

1 ответ на вопрос

0
JeromeLEKIEFFRE

Я пишу ответ, с чем мне помогли в комментариях.

Кредиты на @kostix;)


Вероятно, главной проблемой было чрезмерное использование sudo в скрипте, который выполняется Udev, у которого уже есть права root . @kostix предложил мне написать два разных скрипта, один с действиями и один основной, который вызывает функции в скрипте действий. Я выполнил оба решения, удалив sudoненужное и создав другой сценарий с действиями. Это сработало отлично, и теперь я могу посмотреть на другие проблемы в моем сценарии!