如何建立一个systemd服务使用屏幕,并且仍然可以重新连接到屏幕上的Java应用程序?我已经搜索了一个答案,并尝试了几个不同的东西,但我认为systemd正在向整个事情投入一个扳机。Ubuntu的,屏幕,SSH和Systemd
我有一个Java应用程序设置为在systemd服务运行。它使用屏幕,因为我需要能够在它运行之后以交互方式处理它。它在没有GUI的Ubuntu 16.04服务器上。我通过SSH远程管理它。 Java应用程序在它自己的用户下运行,它不具有sudo权限。我使用sudoers文件来授予该用户启动和停止与Java应用程序关联的特定服务的权限。 。问题是当我需要重新安装到屏幕上的应用程序在运行
原来,这是我用在systemd我的服务单位如何启动应用程序:
当我SSH与特定的SSH连接的用户,sudo来,该应用程序运行的,并尝试重新连接到该应用程序在运行时屏幕的特定用户,我不断收到此错误:
Cannot open your terminal '/dev/pts/1' - please check.
错误,我相信你知道,可以有不同的数字,但大多数时候我会得到'1'我它。网上找了一些资料后,我不明白为什么我不是前开始/ bin/sh的外壳,但改变了命令,这,看看它所做的任何差异:
ExecStart=/usr/bin/script -q -c "/usr/bin/screen -DmS screen-name /usr/bin/java -server -someotheroptions -jar /path/to/jar/file.jar" /dev/null
两个命令工作很好启动我的应用程序。我可以随意启动和停止服务,然后重新启动并使服务无故启动。这一切都有效。除了通过SSH重新连接到屏幕。
没有人有任何的想法我能做些什么来得到这个工作,这样当我SSH方式,sudo来应用程序的用户,并尝试重新连接,它的工作原理?
我想补充一些细节,我可以sudo来应用程序的用户,并运行'屏幕-list',看到我想要的画面。所以我知道屏幕正在初始化。 – Tyrelius
我也可以交互(发送命令)与屏幕非交互,从crontab中,使用'屏幕-S屏幕名称-X东西“commandhere^M”'唯一的问题是重新连接到屏幕上,这样我可以看到从我输入的应用程序事件和命令输出。 – Tyrelius