在期望脚本的背景中运行节点

时间:2016-02-03 09:17:02

标签: node.js expect

我正在尝试从expect脚本运行多个节点服务,因此要逐个运行它们,我需要在后台运行它们。从控制台运行它工作正常(进程已启动并在后台启动),如:

devise :database_authenticatable, :registerable, :confirmable,
     :recoverable, :rememberable, :trackable, :validatable

但运行我的期望脚本,就像:

>node /path/to/service1/myService1.js &> /var/log/myService1.log &
>node /path/to/service2/myService2.js &> /var/log/myService2.log &

我看到它们不是在后台启动..所有在服务文件之后的内容(例如#!/usr/bin/expect set customer_root_dir "/path" set customer_app_dir "/to" set services {"service1" "service2"} set service_names {"myService1" "myService2"} # Set the maximum match length match_max [ expr 32 * 1024 ] foreach service $services service_name $service_names { spawn node $customer_root_dir/$customer_app_dir/$service/$service_name.js &> /var/log/$service_name.log & sleep 2 } puts "All services are running!" ),我的意思是service1.js,都被忽略了!如果我输入类似&> /var/log/myService1.log &的内容,则期望脚本会将其作为spawn node $customer_root_dir/$customer_app_dir/$service/$service_name.js abracadabra

运行

我尝试了什么?

  • 我尝试将spawn node $customer_root_dir/$customer_app_dir/$service/$service_name.js替换为spawn
  • 我试过exec但仍然没有运气。
  • 我也尝试了send "pawn node $customer_root_dir/$customer_app_dir/$service/$service_name.js &> /var/log/$service_name.log &\r",但流程没有启动,nohup也没有包含我的日志文件。

如何解决我的问题?

1 个答案:

答案 0 :(得分:3)

这应该有效:

set js  $customer_root_dir/$customer_app_dir/$service/$service_name.js
set log /var/log/$service_name.log

exec nohup node $js < /dev/null >& $log &

请注意,将stdout和stderr写入文件的Tcl重定向为>&(请参阅exec手册页)。同时重定向所有stdio通道以断开与终端的连接。

spawn不是正确的命令:您不需要与流程进行交互,因此只需exec并忘记它。