如何使用非特权用户的 upstart 作业启动屏幕会话?

Ril*_*nch 6 startup gnu-screen upstart

我正在尝试创建一个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
Run Code Online (Sandbox Code Playgroud)

据我所知,脚本似乎工作正常,我可以运行sudo start bungeecord并获得预期的结果,但是,重新启动机器不起作用。相反,我在以下内容中收到此错误/var/log/upstart/bungeecord.log

Cannot make directory '/var/run/screen': Permission denied
Run Code Online (Sandbox Code Playgroud)

我查了这个错误,搜索结果是模糊的和不确定的。我试过以 root 身份运行命令,这消除了错误,但仍然没有screen会话。我试过不同的命令是这样的:

su ridog -c "screen -dmS BungeeCord java -jar /home/ridog/BungeeCord/BungeeCord.jar"
Run Code Online (Sandbox Code Playgroud)

Ril*_*nch -1

问题解决了,我从使用切换upstart到使用cron。它变得简单多了,现在一切都很好。

对于阅读本文的任何人可能对我是如何做到的感到好奇,我做了一个简单的shell script

#!/bin/bash
java -Xms256M -Xmx256M -jar /home/ridog/BungeeCord/BungeeCord.jar
Run Code Online (Sandbox Code Playgroud)

并将其设置为在启动时运行,并在以下位置添加新行crontab -e

@reboot screen -dmS BungeeCord sh /home/ridog/BungeeCord/run.sh
Run Code Online (Sandbox Code Playgroud)

感谢您的帮助!