2017-03-21 5 views
1

Wenn Sie nicht mit Icecast vertraut sind, ist es ein Multimedia-Server.schluck-exec Kind Prozess sofort schließen

Wenn ich icecast -c ./icecast/icecast.xml im Terminal laufen lasse, startet es einen Icecast-Server, der am Leben bleibt.

Also ich möchte diesen Befehl neben meinem node.js-Prozess ausführen, jedes Mal, wenn ich gulp ausführen.

Ich fügte meinem gulfile folgendes hinzu.

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`) 
    }) 
}) 

Wenn ich den Befehl gulp icecast in meinem Terminal laufen, sagt schluck Starting 'icecast'... und dann sofort beendet. Keine der Rückrufe wird ausgelöst. Ich würde es wirklich gerne am Leben erhalten, bis ich den Schluckprozess geschafft hätte.

Ich habe das Gefühl, dass ich ein grundlegendes Wissen darüber, wie Schluck funktioniert, fehlt, aber ich kann nichts finden, das solche Themen in der Schluck (oder Schluck-Exec) -Dokumente erwähnt.

Antwort

0

Ich hatte ein sehr ähnliches Problem, und bemerkte, dass die gulp-exec page has a note warnt, dass, wenn Sie nur einen Befehl ausführen möchten, sollten Sie Node verwenden.

Lauf exec(command) sofort aus dem Prozess; aber wenn ich die Syntax versucht, angegeben in großen Schluck-exec Seite, die einen Rückruf umfasst:

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); 
    }); 
}) 

Es hielt nun den Prozess lebendig. Ich brauche nicht stdout und stderr ausgegeben, gelang es so zu entkommen mit:

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

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

Ich bin nicht in Knoten versiert, nur teilen, was für mich gearbeitet; Ich hoffe, dass diese Lösung Ihr Problem anspricht.