부팅시 rc.local에서 스크린 세션 실행


10

부팅시 rc.local의 특정 사용자에서 분리 된 화면을 실행하려고합니다. 아래 코드는 지금까지 가지고 있지만 작동하지 않습니다. su 부분에 오류가있는 것 같습니다.

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

답변:


13

-c매개 변수 ( subash)는 최소한 인용해야 한다고 생각합니다 .

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기본적 으로 GNU 의 + 로 Ctrl+ B-다시 설정되었습니다 .screenCtrlA

창을 거의 임의의 수의 창 (수직 수평) 으로 분할 할 수 있으며 구성 파일 형식 (상태 파에 대한 형식 포함)은 실제로 사람이 이해할 수 있습니다. 물론 원래 백그라운드에서 데몬으로 쓰여지지 않은 일부 프로그램 / 스크립트를 단순히 실행하려는 경우 tmux만큼 좋습니다 screen. 그러나 터미널 멀티플렉서와 ​​상호 작용하려면 따뜻하게 권장 tmux합니다.


나는 이것을 몇 가지 시도해 볼 것이다. 나는 절대 경로를 사용을 실행하고 스크립트는, 그래서 당신은 추천 su또는 sudo?
ATLChris

1
sudo이미 로그인 한 곳인 rc.local에서 실행한다면 로그인 쉘이 빠지기 때문에 좋은 선택이 아닙니다. 참고로 /etc/init/tty1.conf여기에서 [a] getty를 화면으로 바꿉니다.
aquaherd

@ aquaherd : 내가 쓸 때 꼭 기억해야 할 것은 아닙니다 . 실마리는 평소에 있습니다 sudo su -... sudo(슈퍼 유저), su(사용자 전환) ... .conf에 대한 좋은 생각
0xC0000022L

1
나는 당신의 사악한 말 때문에이 게시물을 +1하고 있습니다. 나는 그것을 좋아한다! 새로운 세션을 강제로 시작할 수 있기 때문에 화면을 대체하는 훌륭한 방법입니다.
양자 물리학 자

@aquaherd는를 sudo사용하여 로그인 쉘을 잘 시작할 수 있습니다 -i.
muru


1

내가 사용한 것은 다음과 같습니다. 가장 깨끗하고 가장 단순하다는 것을 알았습니다.

"user"를 사용자로 바꾸어 실행하십시오. 스크린 세션 이름으로 "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


0

현재 분리 된 새 화면에서 스크립트 시작 (rc.local = root) :

screen -dmS <session name> <command>, 예:

screen -dmS screenName bash /home/user/run.sh


rc.local과 같은에서 스크립트를 시작 user:

runuser -l user -c 'screen -dmS screenName bash /home/user/run.sh'

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.