Как установить переменную ENV с помощью crontab для всех пользователей?

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

Этот скрипт, который я сделал, является обходным решением для людей, которым необходимо запустить графическое приложение (, например Gedit , Synaptic или GParted)как root через sudo в сеансе Wayland :

https://gist.github.com/wachambo/bd22e12db2d5a46dc109bd0d553733be

Импортировано сюда:

#!/usr/bin/env bash

#
# Enable root access to x-windows system.
#
# Motivation: Trying to run a graphical application as root via su, sudo in a 
# Wayland session (e.g. GParted or Gedit), will fail. Apps which use polkit to
# request administrator permissions for just certain operations and only when 
# needed are not affected (they are not started as root right away). 
# [1] https://bugzilla.redhat.com/show_bug.cgi?id=1274451
#
# Based on a Reddit comment.
# [2] https://www.reddit.com/r/Fedora/comments/5eb633/solution_running_graphical_app_with_sudo_in/

if (( $# != 1 )); then
    echo "Illegal number of parameters."
    echo
    echo "Usage: wsudo [command]"
    exit 1
fi

for cmd in sudo xhost; do
    if ! type -P $cmd &>/dev/null; then
        echo "$cmd it's not installed. Aborting." >&2
        exit 1
    fi
done

xhost +SI:localuser:root
sudo $1
#disable root access after application terminates
xhost -SI:localuser:root
#print access status to allow verification that root access was removed
xhost

0
06.01.2021, 03:37
1 ответ

Неверный вывод -Возможность изменения среды процесса извне процесса.

Допустим, вы запустили скрипт ruby.

Это запускает экземпляр оболочки bash с переменными окружения, в котором интерпретатор ruby ​​начинает наследовать текущую среду экземпляра оболочки bash и, возможно, добавляет некоторые новые переменные окружения, специфичные для интерпретатора.

Каждая запущенная программа получает process idили pid. Окружение процесса хранится в /proc/<pid>/environ, которое доступно только для чтения и не может быть изменено извне -, как указано здесь изменить окружение запущенного процесса

Пока работает ваш скрипт ruby, родительский экземпляр bash тоже работает. Этот экземпляр bash не читает измененные переменные env и не наследует и не распространяет новые переменные на свой дочерний элемент:

$ pstree -p | grep ruby
bash(1234)---ruby(5678)

вы можете найти свои env.vars с помощьюxargs -n 1 -0 < /proc/5678/environ | grep MYVAR

Единственный способ получить новые измененные переменные среды во время работы скрипта — это запустить новый экземпляр bash/ruby и выйти из старого.


Возможный неправильный вывод -скрипт постоянно читает из env -скрипт получает уведомление, когда env изменяется -env не кэшируется интерпретатором.

Обычно скрипт инициализирует чтение env vars. только при запуске скрипта и продолжает использовать внутренние переменные во время выполнения, а не env _vars. Даже если бы изменение процесса env извне было возможно, и скрипт постоянно считывает переменные среды -, env может быть кешированной копией, а не реальной сделкой.

(пример питона)

# start
key = os.environ.get('MYVAR')

# do something with key until scripts ends

Ответы:

  1. Измените сценарий ruby, чтобы он выполнялся openssl rand -hex 32и время от времени считывал результат в переменную.
  2. Измените сценарий ruby, чтобы время от времени считывать файл /path/dataв переменную, генерируемую cron, с выводом из openssl rand -hex 32.
  3. Задание cron перезапускает сценарий с новой средой. (т.е. с sudo # see switches -i -u and --), как упоминалось в комментариях, пользовательская среда env может быть установлена ​​​​в profile.d что -делать --скрипты -в -и т. д. -профиль -д -делать
2
18.03.2021, 22:38

Теги

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