2017-06-05 15 views
0

検索クエリ(単純な文字列)に基づいて基本的にイメージを取得するボットを構築中ですが、このボットは24時間365日実行する必要がありますが、ボットは別のアカウントのために '生成'されている必要があります、私はすでにボットを完了しています、それは基本的に設定ファイルを取り、ループを開始しますが、このプロセスを一時停止して停止するにはどうすればよいですか?Node.jsプロセス/ループの開始、一時停止、停止

Nodeのspawn child関数を調べましたが、RxJのスケジューラを調べましたが、これに近づくのがベストであるかどうかはわかりません。どんな洞察も役に立つでしょう、ありがとう!

答えて

0

child_process.forkを使用して二次自動化スクリプトをフォークし、.on('message')を使用してプロセスの状態を前後に処理していました。

0

あなたの説明によると、プロセスツリー全体を停止する必要があります。ソリューションは、コードが実行されているプラ​​ットフォームによって異なります。 Windowsでは、taskkillコマンドを実行してlinux/macosでそれらを終了させることができます.npmからtree-killパッケージを利用できます。そしてまず第一に、プロセスのPIDを取得する必要があります。ここでは、以下の参照のための実装です:あなたは24/7実行中のプロセスのPID(あなたのボットの親プロセス)を渡すときには、すべてのボットのプロセスツリーを殺すためにこの機能を使用することができます

const procTreeKill = require('tree-kill') 
const cp = require('child_process') 

const onMacOS =() => { 
    return process.platform === 'darwin' 
} 

const onLinux =() => { 
    return process.platform === 'linux' 
} 

const onWindows =() => { 
    return process.platform === 'win32' 
} 

function kill(pid) { 
    return new Promise(function (resolve, reject) { 
     if (onWindows()) { 
      try { 
       const options = { 
        stdio: [ 
         'pipe', 
         'pipe', 
         'ignore', 
        ] 
       } 

       cp.execFile(
        'taskkill', 
        ['/T', '/F', '/PID', pid.toString()], 
        options, 
        (error, stdout, stderr) => { 
         if (error) { 
          return reject(error) 
         } 

         return resolve(true) 
        } 
       ) 
      } catch (error) { 
       return reject(error) 
      } 
     } else if (onLinux() || onMacOS()) { 
      try { 
       procTreeKill(pid, 'SIGKILL', function (error) { 
        if (error) { 
         return reject(error) 
        } 

        return resolve(true) 
       }) 
      } catch (error) { 
       return reject(error) 
      } 
     } else { 
      return reject(new Error('Platform unsupported.')) 
     } 
    }) 
} 

は、かそのPIDが渡されたワーカープロセスを殺すことができます。

0

シーケンシャルエグゼキュータnsynjsで実行すると、一部の機能を実行、一時停止、停止することができます。 nsynjs.runでの起動方法、nsynWaitによる一時停止方法、ctx.stopによる停止方法については、this example(および対応する.html)を参照してください。

関連する問題