Exécuter la commande `à 5 secondes à partir de maintenant
Dans le cadre d'un peu de script complexe, j'ai besoin de dire à un serveur pour exécuter une simulation. Normalement, je voudrais atteindre cet objectif en faisant ssh user@server 'simulation/script'
. Toutefois, cela permettrait de garder la session ssh en vie jusqu'à ce 'simulation/script'
est fait, ce qui est indésirable pour moi.
J'ai récemment appris à propos de l' at
de commande, et cela semble correspondre à mon problème.
Ce que je veux faire maintenant, c'est pour faire un ssh sur mon serveur, et at
ma simulation de script à exécuter dans les 5 secondes (plus de suffisamment de temps pour la connexion ssh à être fermé). Ainsi, une fois que la connexion ssh est fermé dans un délai de 5 secondes, le serveur va lancer la simulation sans avoir besoin de la connexion ssh pour rester en vie.
Ce que je vais avoir des ennuis avec, est l'expression que at
besoins afin de planifier un travail "5 secondes à partir de maintenant"
J'ai essayé ce qui suit, les expressions du temps, tous qui me donne des erreurs:
now + 5 seconds
now + 5 sec
now + 5 s
now + 5seconds
now + 5sec
now + 5 s
now+5sec
now+5seconds
now+5s
Comment puis-je obtenir mon at
pour exécuter ma commande "5 secondes à partir de maintenant"?
at
, peut-être vous voulez juste ssh user@server bash -c '"simulation/script &"'
...OriginalL'auteur inspectorG4dget | 2012-12-16
Vous devez vous connecter pour publier un commentaire.
Il n'y a pas secondes au :
man at
dit :Ainsi, au lieu de
at
, vous pouvez utiliser unsleep
je pense.Voir
man 1 sleep
Si vous voulez exécuter
ssh user@server 'simulation/script'
sans attendre, il suffit de faire :la commande exécuter en arrière-plan.
En outre, comme Rawkode dit,
nohup
va y aider.Donc finalement :
avec nohup, vous pouvez quitter votre terminal et ont la
ssh
processus vivant.EDIT
: si vous souhaitez exécuter lessh
de commande et de fermer la connexion :&
lassh
, ne sera pas le socket toujours rester ouvert?Le support une fois le script est fini
C'est un problème pour moi. J'ai besoin de la prise de fermer avant que le script commence
Voir mon post édité
à l'aide de
&
ne fonctionnera pas parce que je dois le supprimer manuellement de la connexion ssh avec <kbd>ctrl</kbd><kbd>c</kbd>. Ce n'est pas automatisable. J'ai besoin d'automatiser, de tuer la connexion ssh et exécuter le script. C'est pourquoi j'ai pensé ànow
. Je pense que je devrais juste mordre la balle et nenow + 1 minute
OriginalL'auteur Gilles Quenot
"à" ne pas sous-minute résolution, mais vous pouvez faux:
echo "sleep 23; date > /tmp/date.txt" | at 13:30
et juste après 13:30:23 le contenu de /tmp/date.txt ont été en effet "... 13:30:23..."OriginalL'auteur TomOnTime
at
ne pas utiliser des secondes, à seulement quelques minutes/heures/joursCe que vous pouvez faire est de faire précéder votre script avec
nohup
, ce qui permettra de garantir le script n'est pas tué lorsque vous déconnecter de votre session SSH.ssh server 'nohup yourscript.sh &'
REMARQUE: juste après Avoir joué avec l'au-delà, la connexion SSH doit être tué manuellement.
Une autre alternative serait
screen
screen -d -m yourscript.sh
Cela permettra de lancer un décollement de la
screen
processus que vous pouvez rattacher à n'importe quel moment plus tard.REMARQUE: j'ai testé cela avec le script suivant et de commande et cela a fonctionné parfaitement.
Commande SSH
ssh server.com 'screen -d -m ~/myscript.sh'
myscript.sh
nohup
aider? Je n'ai jamais utilisé avant...nohup
ne tuent pas la commande sur votre déconnexion. Je sais que vous avez déjà fait avecat 1 minute
, mais je vais mettre à jour ma réponse pour la future référence pour les autres.Je suis toujours intéressé à la
nohup
de mise en œuvre (éventuellement pour des projets futurs), donc merci de faire l'effort. Aurais-je le supprimer manuellement de la connexion ssh, ou peut-être automatisé avecnohup
Si vous mettez la commande dans votre
ssh
ligne,ssh
sortira après la commande a été exécutée.ssh server 'command'
Est-il un moyen de faire
ssh
tuer la connexion avant la fin de l'exécution de la commande à distance, tout en gardant la commande à distance vivant dans l'hôte distant (c'est pourquoi je suis allé pour la planification de l'emploi, par opposition àssh
avecnohup
)?OriginalL'auteur Rawkode
Juste à noter: dans
man at
, j'ai vu qu'il y est un-t
commutateur, qui l'acceptera date fois avec secondes - mais, malheureusement, les secondes seront tronqués:... et si le travail peut effectivement être prévue dans le passé (également utilisé
logger
de syslog, parce qu'il n'a pas l'air comme en écho à des terminaux stdout peut fonctionner à partir d'ici)OriginalL'auteur sdaau
Rediriger stdin/stdout/stderr en plus de semi-finition, le script va permettre à la session SSH pour fermer immédiatement après l'exécution de la backgrounded commande:
Source: https://serverfault.com/a/36436/138334.
nohup
pour éviter que le processus d'être tué lors de la session SSH est fermé?OriginalL'auteur Preston
Je pense qu'il est beaucoup plus facile à faire:
où
n
est le nombre de secondes.OriginalL'auteur user6787662
Vous pouvez le faire en utilisant la commande de mise en veille comme ça:
OriginalL'auteur ijj
J'ai rencontré le même problème aujourd'hui, mais j'ai été capable de le résoudre à l'aide de
nohup
nohup bash -c 'sleep 5 && at now -f script-name.sh'
OriginalL'auteur Xaero Degreaz