2017-03-21 1 views
1

Si vous n'êtes pas familier avec icecast, c'est un serveur multimédia.Le processus enfant gulp-exec se ferme immédiatement

Lorsque j'exécute icecast -c ./icecast/icecast.xml dans le terminal, il démarre un serveur icecast, qui reste actif. Donc je veux exécuter cette commande à côté de mon processus node.js, chaque fois que je lance gulp.

J'ai ajouté ce qui suit à mon fichier gulpfile.

import exec from 'gulp-exec' 

... 

const icecastDir = path.resolve(`${__dirname}/icecast/`) 

... 

gulp.task(`icecast`,() => { 
    return exec(`/usr/local/bin/icecast -c ${icecastDir}/icecast.xml`) 
    .on(`data`,() => { 
     console.log(`data`) 
    }) 
    .on(`error`,() => { 
     console.log(`error`) 
    }) 
    .on(`end`,() => { 
     console.log(`end`) 
    }) 
    .on(`close`,() => { 
     console.log(`error`) 
    }) 
    .on(`readable`,() => { 
     console.log(`readable`) 
    }) 
}) 

Quand je lance la commande gulp icecast dans mon terminal, gulp dit Starting 'icecast'... puis immédiatement se termine. Aucun des callbacks ne se déclenche. Je voudrais vraiment qu'il reste en vie jusqu'à ce que je mette-c le processus de gorgée. J'ai l'impression qu'il me manque quelques connaissances fondamentales sur le fonctionnement de gulp, mais je ne trouve rien qui mentionne de tels sujets dans les docs gulp (ou gulp-exec).

Répondre

0

J'ai eu un problème très similaire, et j'ai remarqué que le gulp-exec page has a note qui avertit que, si vous voulez juste exécuter une commande, vous devez utiliser le child_process.exec du nœud.

Exécution exec(command) immédiatement quitté le processus; Cependant, quand j'ai essayé la syntaxe spécifiée dans la page de gulp-exec, qui comprend un rappel:

var exec = require('child_process').exec; 

gulp.task('task', function (cb) { 
    exec('ping localhost', function (err, stdout, stderr) { 
    console.log(stdout); 
    console.log(stderr); 
    cb(err); 
    }); 
}) 

Il remisés le processus vivant. Je ne l'ai pas besoin stdout et stderr, donc réussi à sortir avec:

var exec = require('child_process').exec; 

gulp.task('task', function (cb) { 
    exec('ping localhost', function (e) { cb(e); }); 
}) 

Je ne suis pas versé dans nœud, le partage juste ce qui a fonctionné pour moi; J'espère que cette solution répond à votre problème.