web-dev-qa-db-fra.com

Exécuter un script shell dans tmux

Pourquoi, après avoir exécuté tmux sur un serveur distant via ssh, le programme fonctionne; mais après avoir détaché des sessions, il retourne 404?

Il s’agit d’un programme Go (golang), d’un serveur http à l’écoute sur un port, derrière un proxy inverse nginx.

Premières données: tout fonctionne bien comme ceci:

1 - Je me connecte au serveur en utilisant ssh user@server-ip,

2 - lancez tmux,

3 - lancez ce script dans la session tmux, par . my-script.sh:

#!/bin/sh

go build -v

exec 3>&1 4>&2
trap 'exec 2>&4 1>&3' 0 1 2 3
exec 1>/tmp/myapi.log 2>&1

export API_COUCHDB_ADMIN='admin'
export API_COUCHDB_PASSWORD='************'
export API_COUCHDB_URL='http://172.17.0.2:5984/'
# [some other env variables ...]
./myapi

4 - détachez la session tmux par Ctrl-b puis d.

Jusqu'ici tout va bien! Tout fonctionne correctement dans un navigateur à l'adresse http://www.myapi-consumer.com et le terminal ssh est toujours ouvert. mais

5 - quand je détache la session ssh (par Ctrl + a et d), le programme ne fonctionne plus correctement et renvoie 404 (c'est celui qui envoie 404).

6 - Maintenant, lorsque je me reconnecte au serveur distant en utilisant ssh user@server-ip, il fonctionne à nouveau comme prévu et je teste la partie "travail" sur une autre connexion - sur mon téléphone portable avec une autre connexion Internet.

Qu'est-ce qui se passe?

1
Kaveh Shahbazian

Le problème est que l'application sert des fichiers résidant dans le répertoire de base, qui se démonte lors de la déconnexion.

J'ai la réponse du groupe golang-nuts ici .

1
Kaveh Shahbazian

C'est comme ça que je comprends.

Vous dites que vous quittez la session ou fermez la session de terminal en cours. Un programme en cours et vous venez de fermer votre terminal, il ne sera plus exécuté.

Mais vous utilisez tmux et c’est tout tmux pour exécuter les programmes en arrière-plan.

Essayez d’exécuter le programme en le plaçant en arrière-plan. je veux dire

Nohup myscript.sh &

Nohup pour exécuter votre script même lorsque vous vous déconnectez, &[and] pour afficher votre script en arrière-plan.

J'espère que cela vous aidera.

0
rɑːdʒɑ