Скрипт запуска с sudo в Ubuntu 16.10
Мне нужно запустить скрипт и бинарный файл из /usr/bin
при запуске с привилегиями sudo/root. Я перепробовал много руководств с этого форума, но ничего не получилось (rc.local
а также systemd
стиль, выскочка) - может я что то не так делаю. Моя ОС - Ubuntu GNOME 16.10.
Сценарий будет примерно таким
#!/bin/bash
sudo ./usr/bin/myprogram
sudo bash /home/USER/script.bash
И скрипт, и программа являются исполняемыми. Я просто не знаю, как оптимально запустить их с sudo при запуске.
Пожалуйста, будьте нежны. Я новый пользователь.
2 ответа
Для приложений командной строки, которые не требуют графического интерфейса, достаточно поместить вызов к ним в /etc/rc.local
, который уже запускается от имени root, таким образом, не нуждается sudo
, Ниже приведен пример моего /etc/rc.local
который я использую для запуска двух скриптов мониторинга.
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
/home/xieerqi/bin/batmon.sh &
/home/xieerqi/bin/sh/temperature.sh &
exit 0
Для приложений с графическим интерфейсом вам потребуется другой подход. Вам нужно будет открыть приложение "Автозагрузка приложений" и добавить следующую команду:
bash -c "sleep 10;gksu /usr/bin/my_vpn_program"
Это дает GUI достаточное время для запуска, 10 секунд, затем откроет диалоговое окно ввода пароля и, если вы правильно введете пароль, запустит вашу команду. По сути, это сценарий мини-bash. Ты можешь использовать pkexec
вместо этого, и некоторые могут даже сказать, pkexec
рекомендуется вместо gksu
,
В качестве альтернативы, если вы не хотите вводить пароль каждый раз, вы можете разрешить своему пользователю запускать эту конкретную команду с привилегиями root без аутентификации. Для этого вам нужно отредактировать /etc/sudoers
файл. ВНИМАНИЕ: рекомендуется использовать sudo visudo
редактировать файл из терминала. Ниже приведен пример того, как я использую ту же настройку с pm-suspend
команда:
# Allow using pm-suspend for my user without password
xieerqi ALL = NOPASSWD: /usr/sbin/pm-suspend
Эта строка должна быть добавлена в конец /etc/sudoers
файл и сохранен. Обратите внимание, что вам все еще нужно добавить sudo
или же gksu
в начале каждой команды, которую вы создали. Таким образом, вам нужно будет использовать тот же bash
Команда, которую я показал ранее.
Использовать crontab
возможность запустить скрипт после перезагрузки,
Вы можете сделать это, добавив @reboot
код в cron
Откройте crontab пользователем root:
$ sudo crontab -e
Добавьте следующую запись внизу:
@reboot /usr/bin/myprogram
Это будет делать то, что вы хотите.
Решение настолько простое, что вы его пропустили.:) Поскольку rc.local запускается пользователем root, sudo в вашем файле совершенно не требуется.
Другими словами, поместите его в rc.local, как вы предложили, но пропустите sudo
это из вашего сценария. Они совершенно не нужны, так как rc.local уже запущен от имени пользователя root.
Надеюсь это поможет!