Как бы Вы отредактировали '/etc/crontab 'и файлы в '/etc/cron.d/?

Когда вы запускаете новый эмулятор терминала, он создает новый терминал ( / dev / pts / НОМЕР в Linux) . Программа не должна запускаться с этого терминала для вывода туда (попробуйте запустить tty в терминале, затем в другом терминале запустите echo hello> / dev / pts / NUMBER ). Таким образом, вы можете указать своему скрипту Python читать и писать с терминала; все, что вам нужно, это узнать путь к файлу устройства.

С xterm это довольно просто: запустите xterm -e 'tty> & 3; myCommand ' с файловым дескриптором 3, подключенным к каналу, из которого ваша программа считывает путь к оконечному устройству.

p = subprocess.Popen("xterm -e 'tty >&3; exec sleep 99999999' 3>&1",
                     shell=True, stdout=subprocess.PIPE)
tty_path = readline(p.stdout)
tty = open(tty_path, 'r+')

Ваша программа Python теперь может читать и писать на tty . Когда вы закончите, закройте эмулятор терминала ( os.kill (p.pid, signal.SIGTERM) ).

С эмулятором терминала, который основан на одном процессе для нескольких окон, например xfce4-terminal, то, что вы хотите сделать, значительно сложнее. Запуск xfce4-terminal разрывает связи между родительским процессом и дочерним процессом эмулятора терминала и не дает вам хорошего PID, который вы можете убить. Вы можете использовать именованный канал для связи, но его сложнее настроить.

1
31.10.2018, 01:56
1 ответ

«Предполагаемый» — это суждение.

Команды, вызываемые из /etc/cron.d/, выполняются от имени указанного пользователя (либо root, либо любого другого; это определено в строке cron ). Так что обычно в sudoнет необходимости.

Однако, если у вас действительно есть скрипт, который вызывает sudo, вам необходимо убедиться, что запись sudoersверна. В частности:

  • Убедитесь, что запись назначена пользователю, запускающему скрипт (это может бытьroot)
  • Убедитесь, что для записи установлен атрибут NOPASSWD, чтобы ее можно было запускать без ввода пароля.

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

Хорошо написанный скрипт определяет, работает ли он с правильными разрешениями, и вообще не вызывает sudo, но есть много плохих скриптов:-)

8
27.01.2020, 23:12

Теги

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