web-dev-qa-db-fra.com

Exécuter des commandes sur un serveur s'exécutant sous un compte système

J'ai installé un serveur Minecraft sur un système Ubuntu. Lorsque je lance le serveur à partir de la ligne de commande, le serveur écoute l'entrée standard et répond à diverses commandes (telles que le changement du mode de jeu, du niveau de difficulté ou de l'heure du jour):

enter image description here

(Voir cette démo pour entrer des commandes dans la console du serveur)

Je n'aime pas forcer mon utilisateur root à exécuter minecraft, donc aujourd'hui, je configure un utilisateur système nommé simplement "minecraft":

Sudo adduser --system --no-create-home --home /srv/minecraft-server minecraft
Sudo addgroup --system minecraft
Sudo adduser minecraft minecraft # this adds user "minecraft" the group "minecraft"

et j'utilise un fichier de configuration pour lancer le serveur minecraft sous cet utilisateur:

start on runlevel [2345]

console log
chdir /minecraft_server
setuid minecraft
setgid minecraft

respawn
respawn limit 20 5

exec /usr/bin/Java -Xms1024M -Xmx1800M -jar minecraft_server.1.8.jar nogui

Je souhaite envoyer des commandes au serveur Minecraft via l'entrée standard, comme je le peux lorsque je le lance sous l'utilisateur actuel. J'ai essayé su et Sudo, mais le premier semble être ignoré et le second génère une erreur "commande introuvable". Comme minecraft est un utilisateur du système, je suppose que la connexion interactive est désactivée.

enter image description here

J'ai un peu travaillé avec les systèmes Linux dans le passé, mais je suis hors de portée ici. Comment puis-je transmettre des commandes à l'utilisateur minecraft pour le transmettre au serveur minecraft? Ou n'est-ce pas possible dans ma situation actuelle?

1
JDB

bodhi.zazen a mentionné éventuellement "en cours d'exécution à l'écran". Je n'avais jamais entendu parler de écran avant, mais cela semble avoir résolu le problème.

Tout d'abord, je devais supprimer l'utilisateur Minecraft et le recréer en tant qu'utilisateur normal. Ensuite, j'ai donné à l'utilisateur de minecraft les autorisations nécessaires sur le dossier du serveur minecraft (à l'aide de chmod). Après avoir démarré avec succès le serveur minecraft à partir du nouveau compte utilisateur minecraft, je l'ai arrêté et démarré une session d'écran:

enter image description here

puis redémarrez le serveur minecraft (dans l’écran):

enter image description here

J'ai ensuite utilisé le raccourci d'écran standard pour me détacher de l'écran (Ctrl + a alors juste d). Le serveur minecraft continue de fonctionner en arrière-plan:

enter image description here

Je peux facilement rattacher des commandes en utilisant screen -r:

enter image description here

enter image description here

Je peux mettre fin à ma session SSH sans arrêter le serveur, puis me reconnecter depuis une autre machine. Par exemple, je suis en train de me reconnecter en utilisant un téléphone Android et JuiceSSH:

(personne ne peut voir les commandes que j'ai précédemment émises, puisque l'écran n'a jamais été fermé)

2
JDB