【问题标题】:screen Cannot open your terminal '/dev/pts/0' - please check屏幕无法打开您的终端“/dev/pts/0” - 请检查
【发布时间】:2014-02-15 04:18:42
【问题描述】:

我想以用户“XYZ”的身份使用脚本在屏幕中启动程序。 这是我的简短脚本:

# replace <newuser> with the user you wish to run teamspeak 3 with.
USER="teamspeak"
# Do not change this path
PATH=/bin:/usr/bin:/sbin:/usr/sbin
# The path to the teamspeak 3 server/scripts . example = /home/teamspeak3/teamspeak3-server
DIR=/home/teamspeak/voiceserver/teamspeak3
DAEMON=$DIR/ts3server_startscript.sh
# Change all PARAMS to your needs. I required the ini so teamspeak used MySQL
PARAMS="inifile=ts3server.ini"
#Name = The screen will be named from this.
NAME=teamspeak3
DESC="Teamspeak Server 3"


case "$1" in
start)
echo "Starting $DESC"
script -q -c "su $USER -l -c \"screen -m -d -S $NAME $DAEMON start\"" /dev/null
;;
stop)
su $USER -l -c "screen -S $NAME  -X quit "
    echo " ... done. $DESC Stopped."
;;
restart)
su $USER -l -c "screen -S $NAME  -X quit "
    echo " Closed Process, Restarting"
script -q -c "su $USER -l -c \"screen -m -d -S $NAME $DAEMON start\"" /dev/null
echo " ... done. $DESC Restarted"
;;
status)
# Check whether there's a "Team Speak 3" process
ps aux | grep -v grep | grep ts3server_ > /dev/null
CHECK=$?
[ $CHECK -eq 0 ] && echo "$DESC is UP" || echo "$DESC is DOWN"
;;
*)
echo "Usage: $0 {start|stop|status|restart}"
exit 1
;;
esac
exit 0

我想在屏幕上连接,但我明白了。

Cannot open your terminal '/dev/pts/0' - please check.

我是不是做错了什么?

【问题讨论】:

    标签: linux shell debian gnu-screen


    【解决方案1】:

    发生这种情况是因为您可能执行了sudo su user_name 然后触发了屏幕命令。

    有两种方法可以解决此问题。

    1. 通过 ssh 直接登录到“user_name”。
    2. 取得外壳的所有权 通过输入 script /dev/null 作为用户 user_name 然后输入 screen

    【讨论】:

      【解决方案2】:

      要解决此问题,请尝试以 su 的用户身份运行 script /dev/null,然后再启动 screen

      script -q -c "su $USER -l -c \"screen -m -d -S $NAME $DAEMON start\"" /dev/null
      

      更多:

      【讨论】:

      • @FabianHarmsen:你收到了哪条信息?
      • @FabianHarmsen:screen -ls 是什么意思?
      【解决方案3】:

      运行此命令来拥有外壳

      #script /dev/null  
      

      试试屏幕

      #screen -r < name of the screen >
      

      【讨论】:

        【解决方案4】:

        受到此处两个认可的答案的启发,我将以下功能添加到我的.bashrc

        sscreen(){
            script -q -c "screen $*" /dev/null;
        }
        

        现在我只使用sscreen 而不是screen,再也不用考虑这个问题了。

        【讨论】:

          【解决方案5】:

          这是我找到的方式。 我不能使用来自 rc.local 的screen 或者更好,如果我想使用它我需要root。我不想使用root。我现在的方法是使用crontab -e,这是有效的。

          【讨论】:

            猜你喜欢
            • 2015-03-12
            • 2017-03-07
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-05-31
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多