Я хочу запускать сценарий каждый раз при запуске моего сервера. Проблема в том, что мне нужно быть определенным пользователем для выполнения скрипта, если я попытаюсь сделать это как root, он не сможет найти определенные пакеты (например, ruby).
Пытаюсь перейти на xxx user01.
sudo su user01
/etc/init.d/script start
Однако это не работает.
Бег sudo su user01
в сценарии не означает, что в результирующую оболочку отправляются следующие команды. Фактически, это, скорее всего, означает, что новая оболочка создается как user01, которая никогда не завершается!
Две вещи:
-c 'command...'
аргумент su, как su user01 -c '/etc/init.d/script start'
.chkconfig
или update-rc.d
. Вам также не нужны рабочие места в /etc/init.d, которые нельзя запускать как root
. Сами задания могут свободно переноситься на другую учетную запись пользователя, но должны вызываться пользователем root.Вы могли бы что-нибудь вставить /etc/crontab
и запустить это @reboot
@reboot username /etc/init.d/script start
Вы можете просто запустить команду через sudo вот так:
sudo -H -u user01 /etc/init.d/script start
-H устанавливает переменную среды HOME равной переменной пользователя
-u указывает имя пользователя для запуска от имени
Конечно, вы не можете запустить этот скрипт с помощью sudo из-за requiretty (заставляет пользователей входить в систему) в sudoers. Вы можете отключить, что несколько рискованно
Также есть несколько старый инструмент под названием runsuid: http://freecode.com/projects/runsuid
HTH