2

Я сделал простой сценарий .sh, который каждую минуту проверяет, является ли конкретный файл пустым или нет, а светодиод на моем ноутбуке мигает с частотой 0,5 Гц. Я вызываю этот скрипт из моего .bash_profile .

Всякий раз, когда я нахожусь в TTY, это работает безупречно (скажем, когда файл не пустой, светодиод на моем лапе мигает с такой частотой).

Но когда я запускаю X (я использую Xmonad/urxvt, вызываемый через startx если это может помочь), происходит что-то странное. Частота мигания нерегулярна, она немного замедляет работу машины, и когда я вызываю top я вижу различные процессы sudo (тот, который я вызываю для включения или выключения светодиода).

Это такое же поведение, как если бы я вызывал сценарий три или четыре раза.

Я не знаю, как диагностировать проблему. В руководстве сказано, что .bash_profile читается один раз (во время входа в систему). Можете ли вы помочь мне?

# blink mail led

blinkTime="0.2"
checkTime="60"


while true; do
  hasIt=$(cat ~/someFolder/hazText.txt) # 1: has text

  if [ $hasIt -eq "1" ]
  then
    echo "1" | sudo tee /sys/class/leds/led:alarm/brightness > /dev/null
    sleep $blinkTime
    echo "0" | sudo tee /sys/class/leds/led:alarm/brightness > /dev/null
    sleep $blinkTime
  else
    sleep $checkTime
  fi

done

1 ответ1

1

.bash_profile выполняется, когда Bash запускается как оболочка входа в систему, а не "во время входа", как вы написали. Это означает , что каждый раз , когда Bash начинается либо с опцией "--login" или как "-bash" он будет читать и выполнять .bash_profile Скорее всего, запуск вашего сеанса X неявно запускает несколько экземпляров Bash (поскольку это оболочка по умолчанию в Linux). Возможно, некоторые из этих случаев являются оболочками входа в систему, ваш сценарий вызывается несколько раз, что заставляет ваш светодиод перейти в режим дискотеки.

Решением вашей проблемы было бы переместить скрипт из .bash_profile и либо создать для него задание cron , либо переписать его с помощью inotify-tools.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .