권한이 없는 사용자가 있는 시작 작업을 사용하여 스크린 세션을 시작하려면 어떻게 해야 합니까?

권한이 없는 사용자가 있는 시작 작업을 사용하여 스크린 세션을 시작하려면 어떻게 해야 합니까?

부팅 시 새 세션을 시작하는 Upstart 작업을 생성하려고 합니다 screen. 여기서 실행 파일을 자동으로 시작하고 싶습니다 java. 다른 여러 가지를 시도했지만 현재 작업하려고 하는 .conf 파일은 다음과 같습니다.

description     "Run the bungeecord jar"

start on (local-filesystems and net-device-up IFACE=eth0 and runlevel [2345])
stop on runlevel [016]

exec start-stop-daemon --start -c ridog --exec /usr/bin/screen -- -dmUS BungeeCord java -server -XX:UseSSE=4 -XX:+UseCMSCompactAtFullCollection -XX:MaxPermSize=356m -XX:ParallelGCThreads=6 -XX:+UseConcMarkSweepGC -XX:+DisableExplicitGC -XX:+CMSIncrementalMode -XX:+CMSIncrementalPacing -XX:+UseCompressedOops -XX:+AggressiveOpts -Xmx256M -jar BungeeCord.jar

pre-stop script
    screen -S BungeeCord -X foo "end^M"
end script

내가 아는 바로는 스크립트가 제대로 작동하는 것 같고 실행하여 sudo start bungeecord의도한 결과를 얻을 수 있지만 컴퓨터를 다시 시작해도 작동하지 않습니다. 대신 다음에서 이 오류가 발생합니다 /var/log/upstart/bungeecord.log.

Cannot make directory '/var/run/screen': Permission denied

이 오류를 찾아봤는데 검색 결과가 모호하고 결론이 나지 않습니다. 루트로 명령을 실행해 보았지만 오류가 제거되었지만 여전히 screen세션이 없습니다. 나는 다음과 같은 다양한 명령을 시도했습니다.

su ridog -c "screen -dmS BungeeCord java -jar /home/ridog/BungeeCord/BungeeCord.jar"

답변1

upstart를 통해 화면을 호출하는 것은 실제로 다소 까다롭습니다. 존재하지 않는 것과 관련된 첫 번째 문제는 /var/run/screen쉽게 해결될 수 있습니다.

Ubuntu 10.10~13.10에는 부팅 시 정리 및 (다시) 생성을 담당하는 시작 작업이 있으므로 /var/run/screen해당 작업 이후에 시작 스크립트가 실행되는지 확인해야 합니다.

start on stopped screen-cleanup

Ubuntu 10.04 이하와 Ubuntu 14.04 이상에서 해당 코드는 init 스크립트에 있습니다. /etc/init.d/screen-cleanup이는 시작 작업이 다음의 결과로 이를 참조할 수 있음을 의미합니다 rc.

start on stopped rc

그러나 화면은 여전히 ​​/var/run/screen 권한에 대해 불평할 것입니다. 이 문제는 setid를 통해 screen을 호출하여 해결할 수 있습니다.

exec setsid screen -Dm /some/command

화면 세션은 한 번 포크되므로 upstart가 올바른 pid를 따르도록 "expect for fork" 스탠자를 추가해야 합니다.

다음은 전체 예제 스크립트입니다(최소 Ubuntu 12.04 필요).

# screen startup script
# requires upstart v1.4 or newer

description "running top in screen session"

start on ( local-filesystems
           and stopped rc )
stop on runlevel [!2345]

respawn

setuid test
setgid test

# "setsid screen -Dm" only forks once
expect fork

# use setsid to avoid screen complaining about /var/run/screen permissions.
exec setsid screen -Dm -S mytopsession /usr/bin/top

답변2

전화를 걸기 전에 적절한 권한으로 /var/run/screen생성 하세요 .rootscreen

답변3

문제 해결됨, 나는 using 에서 upstartusing 으로 전환했습니다 cron. 훨씬 더 간단해졌고 이제 모든 것이 훌륭하게 작동합니다.

이 글을 읽고 내가 어떻게 했는지 궁금해하는 분들을 위해 간단하게 만들었습니다 shell script.

#!/bin/bash
java -Xms256M -Xmx256M -jar /home/ridog/BungeeCord/BungeeCord.jar

그리고 다음 줄에 새 줄을 추가하여 시작 시 실행되도록 설정합니다 crontab -e.

@reboot screen -dmS BungeeCord sh /home/ridog/BungeeCord/run.sh

당신의 도움을 주셔서 감사합니다!

관련 정보