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

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

실행 파일을 screen자동으로 시작하려는 시작 시 새 세션을 시작하는 Upstart 작업을 생성하려고 합니다 . 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즉, upstart 작업은 다음의 결과로 이를 참조할 수 있습니다 rc.

start on stopped rc

그러나 화면은 여전히 ​​/var/run/screen 권한에 대해 불만을 표시할 수 있습니다. 이 문제는 다음과 같이 setid로 screen을 호출하여 해결할 수 있습니다.

exec setsid screen -Dm /some/command

화면 세션은 한 번 분기되므로 upstart가 올바른 pid를 따르도록 하려면 "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

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

관련 정보