Ik wil een programma in een scherm starten als de gebruiker “XYZ” met een script.
Dit is mijn script in korte vorm:
# 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
Ik wil verbinding maken op het scherm, maar ik heb dit.
Cannot open your terminal '/dev/pts/0' - please check.
Heb ik iets verkeerd gedaan?
Antwoord 1, autoriteit 100%
Dit gebeurt omdat je misschien een sudo su user_name
hebt gedaan en vervolgens het schermcommando hebt gegeven.
Er zijn 2 manieren om dit op te lossen.
- Log rechtstreeks in op “user_name” via ssh.
- Beheer de shell
doorscript /dev/null
te typen als de gebruikeruser_name
en vervolgens te typen
screen
Antwoord 2, autoriteit 50%
Om het probleem op te lossen, probeert u script /dev/null
uit te voeren als de gebruiker die u su
gebruikt voordat u screen
start.
script -q -c "su $USER -l -c \"screen -m -d -S $NAME $DAEMON start\"" /dev/null
Meer hierover:
Antwoord 3, autoriteit 7%
Voer deze opdracht uit om eigenaar te worden van de shell
#script /dev/null
en probeer Scherm
#screen -r < name of the screen >
Antwoord 4, autoriteit 7%
Geïnspireerd door beide goedgekeurde antwoorden hier heb ik de volgende functie toegevoegd aan mijn .bashrc
:
sscreen(){
script -q -c "screen $*" /dev/null;
}
Nu gebruik ik gewoon sscreen
in plaats van screen
en hoef ik nooit meer over het probleem na te denken.
Antwoord 5
hier is de manier die ik heb gevonden.
ik kan screen
van rc.localniet gebruiken of beter als ik het wil gebruiken, ik zou root nodig hebben. Ik wil geen root gebruiken. Mijn manier is nu om crontab -e
te gebruiken, dit werkt.