SUDO не найден при вызове внутри функции в сценарии BASH

TLDR; Примерно через неделю я потерял ядро ​​ЦП, вероятно, из-за перегрева/неудачного размещения радиатора/вентилятора.

  • Если вы используете ESXi, я бы запустил другую ОС и проверил температуру и/или подумал о -установке радиатора ЦП.

  • Этот пост набрал много просмотров, и когда у меня возникла проблема, в Google было очень мало информации для меня. Поделитесь своим опытом в комментариях или ответах!

Временная шкала:

  • Я получаю сообщение об ошибке Jiffies
  • Для перезагрузки необходимо использовать кнопку питания
  • Перестроение массива MDADM --> Успешно.
  • На следующий день я получаю еще одну ошибку
  • Перезагрузка/восстановление выполнены успешно.
  • Еще одна ошибка!
  • Перестроить ВМ с новой ОС
  • Стабильно около недели
  • Отказ одного ядра ЦП!

Дальнейшее изучение ESXi показало мне, что ESXi НЕ собирает временные данные устройств без какого-либо дополнительного аппаратного обеспечения, которого у меня не было. (Возможно, потому, что я не использовал компьютер из «Списка совместимого оборудования».(https://communities.vmware.com/thread/547244). Если бы это было так, ESXi, вероятно, задушил бы мой процессор. Теперь я использую KVM, который проверяет все временные параметры моего устройства обычными методами и реагирует соответствующим образом. Не только это, но и моя скорость RW значительно увеличилась, поскольку мой гипервизор теперь также является моим файловым сервером по сравнению с тем, когда мне приходилось передавать диски на виртуальную машину файлового сервера, поскольку ESXi не поддерживает SMB/NFS/MDADM и т. д.(Я говорю о 2- или 3-кратном увеличении скорости RW теперь, когда мои клиенты обращаются напрямую к гипервизору/файловому серверу ).

1
10.02.2020, 00:24
1 ответ

Вы переопределили зарезервированную переменную $PATH, содержащую набор местоположений для поиска таких команд, как sudo.

Не используйте заглавные буквы в именах переменных, и все будет хорошо.

create_dir() {
  local path="$1"
  local owner="$2"
  # create log directory
  printf "\n* Creating directory %s\n" "$path"
  if [[ -d "$path" ]]  
  then
    printf "  * %s already exists, no action done\n" "$path"
  else 
    printf "  * %s does not exists, creating dir\n" "$path"
    sudo mkdir "$path"
  fi

  sudo chown "$owner" "$path"
}

Заметьте также, что я дважды -заключал в кавычки переменные, когда они используются, чтобы их значения не анализировались оболочкой.

Вы также можете упростить это за счет некоторой регистрации:

create_dir() {
    local path="$1" owner="$2"

    printf "\n* Creating directory %s\n" "$path"
    sudo mkdir -p "$path"
    sudo chown "$owner" "$path"
}
3
28.04.2021, 23:24

Теги

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