2010-03-23 7 views
11

J'ai un script PHP avec une boucle infinie. J'ai besoin que ce script tourne pour toujours. Donc, je coursComment exécuter un script infiniment en arrière-plan sous Linux?

php /path/to/script.php > /dev/null & 

Et cela fonctionne en arrière-plan dans le contexte de sécurité de mon utilisateur actuel. Mais quand je ferme la fenêtre du terminal (déconnecte), bien sûr, CentOS Linux tue mon programme.

Je vois deux suppositions: exécuter à partir d'un utilisateur différent en arrière-plan ou faire un démon. J'ai besoin d'aide dans chaque situation.

Merci beaucoup!

+0

duplicata possible de http://stackoverflow.com/questions/285015/linux-prevent-a-background-process-from-being-stopped-after-closing-ssh-client – Ether

Répondre

24

nohup est votre ami.

nohup command & 
+0

Tellement simple! Je vous remercie! –

6

Je pense que la solution générale à cette question est nohup:

nohup est une commande POSIX d'ignorer le signal HUP (Raccrocher), ce qui permet la commande de continuer à fonctionner après que l'utilisateur qui exécute la commande a déconnecté. Le signal HUP (raccrochage) est par convention la manière dont un terminal avertit les processus de déconnexion. Nohup est le plus souvent utilisé pour exécuter des commandes en arrière-plan en tant que démons. La sortie qui irait normalement au terminal passe à un fichier appelé nohup.out s'il n'a pas déjà été redirigé. Cette commande est très utile lorsqu'il est nécessaire d'exécuter plusieurs tâches par lots qui sont interdépendantes.

1

Vous pouvez:

  • Installer l'écran et exécutez la commande à partir de là. L'écran est une session de terminal persistante que vous pouvez laisser en cours d'exécution.
  • Ecrire un init/arriviste (tout ce que vous utilisez) script pour qu'il charge au démarrage
  • Utilisez le lib system_daemon
  • poire Utiliser Cron si le travail par lots correspond au scénario mieux (rappelez-vous juste pour vérifier les cas en cours d'exécution avant de lancer une autre, IFF est un problème concurrency)
  • Edit: ou comme tout le monde et leur frère vient de dire, nohup
0

Utilisation de la commande

nohup your_command &

Par exemple
nohup PhantomJS Highcharts-convert.js -host 127.0.0.1 -port 3003 &

ici « PhantomJS Highcharts-convert.js -host 127.0.0.1 -port 3003 "était ma commande

Questions connexes