Запустите сеанс экрана при загрузке с rc.local

9

Я пытаюсь запустить отдельный экран под конкретным пользователем в rc.local при загрузке. Код ниже - это то, что у меня есть, но оно не работает для меня. Часть su, кажется, дает мне ошибку.

su - username -c /usr/bin/screen -dmS test bash -c '/var/www/path/to/script/script.sh; exec bash'
ATLChris
источник

Ответы:

13

Я думаю, что оба -cпараметра ( suи bash) должны быть указаны как минимум.

su - username -c "/usr/bin/screen -dmS test bash -c '/var/www/path/to/script/script.sh; exec bash'"

Также -ожидается, что будет последним и может быть нежелательным здесь (см. man su).


Еще несколько замечаний. sudo может быть лучшим выбором для одноразовой команды, как ваша, но не обязательно:

sudo -iu username /usr/bin/screen -dmS test bash -c '/var/www/path/to/script/script.sh; exec bash'

В частности, вы можете использовать на один уровень меньше цитат с sudo.

Другая вещь, с которой вы хотите быть осторожным, - это выполнение команд без абсолютного пути в привилегированном контексте. Это верно для su(или sudo), но также и для пути к bashвашей команде. Вы делаете это правильно с screen.

Только что проверил следующее и все работает хорошо. Я думаю, что -это главная проблема в вашей оригинальной строке:

/bin/su username -c "/usr/bin/screen -dmS test bash -c '/home/username/test.sh; exec bash'"

Злое замечание: почему бы тебе не tmuxпопробовать? Я недавно перешел и никогда не оглядывался назад. Единственное , что мне нужно было немедленно изменить было сочетание клавиш префикс, в tmuxдефолтов до Ctrl+ B- обратно к GNU screen«s Ctrl+ A.

Это позволяет разбить ваше окно на почти произвольное количество панелей (по вертикали и по горизонтали), и его формат файла конфигурации (включая формат для пар статуса) на самом деле понятен людям. Конечно, tmuxэто так же хорошо, как screenкогда вы просто хотите запустить какую-нибудь программу / скрипт, изначально не написанный как демон в фоновом режиме. Однако, если вы собираетесь взаимодействовать с терминальным мультиплексором, я настоятельно рекомендую tmux.

0xC0000022L
источник
Я дам это попробовать в нескольких. Скрипт, который я запускаю, использует абсолютные пути, поэтому вы бы порекомендовали suили sudo?
ATLChris
1
sudoне очень хороший выбор, если вы запускаете из rc.local, где вы уже являетесь пользователем root, так как вы пропустите оболочку входа в систему. Обратите внимание: /etc/init/tty1.confзамените [a] getty на screen здесь.
Aquaherd
@aquaherd: это то, что я имел в виду, когда писал, но не обязательно . Подсказка, на самом деле, заключается в обычном sudo su -... sudo(делать с suправами суперпользователя), (переключить пользователя) ... хорошая идея о .conf
0xC0000022L
1
Я должен сказать, что я добавляю этот пост только из-за вашего злого замечания. Я люблю это! Это отличная замена экрана, так как можно заставить его начать новый сеанс.
Квантовый физик
@aquaherd sudoможет хорошо запустить оболочку входа в систему, используя -i.
Муру
1

Попробуй sudo -u usernameвместоsu - username

prophecy201
источник
1

Вот то, что я использовал, я нашел, что это было самым чистым и самым простым (проверенная работа самостоятельно):

Замените «пользователь» на пользователя, чтобы запустить его как. Замените «nameyouchoose» как имя сеанса экрана. Замените «/script/start.bash» на путь вашего скрипта.

/usr/bin/sudo -u user /usr/bin/screen -dmS nameyouchoose /script/start.bash

Источник: http://realtechtalk.com/How_to_start_screen_in_bash_script_or_from_etcrclocal_on_startup_as_a_specific_user-1980-articles

Ариб Су Ясир
источник