jobd: support launcher environment settings
This commit is contained in:
parent
832055d922
commit
0327f8962f
@ -382,6 +382,10 @@ Without section:
|
||||
in every request
|
||||
- `launcher` *(required, string)* — a template of shell command that will be launched
|
||||
for every job. `{id}` will be replaced with job id
|
||||
- `launcher.cwd` *(string, default: `process.cwd()`)* — current working directory
|
||||
for spawned launcher processes
|
||||
- `launcher.env.{any}` *(string)* — environment variable for spawned launcher
|
||||
processes
|
||||
- `max_output_buffer` *(int, default: `1048576`)*
|
||||
|
||||
Under the `[targets]` section, targets are specified. Each target is specified on
|
||||
|
@ -24,6 +24,8 @@ mysql_fetch_limit = 10
|
||||
|
||||
; launcher command template
|
||||
launcher = php /Users/ch1p/jobd-launcher.php --id {id}
|
||||
launcher.cwd = /Users/ch1p
|
||||
launcher.env.LC_ALL = en_US.UTF-8
|
||||
max_output_buffer = 16777216
|
||||
|
||||
[targets]
|
||||
|
@ -49,6 +49,14 @@ function processScheme(source, scheme) {
|
||||
value = !!value
|
||||
}
|
||||
break
|
||||
|
||||
case 'map':
|
||||
value = {}
|
||||
for (let key1 in source) {
|
||||
if (key1.startsWith(`${key}.`))
|
||||
value[key1.substring(key.length+1)] = source[key1]
|
||||
}
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
@ -85,6 +93,8 @@ function parseWorkerConfig(file) {
|
||||
mysql_fetch_limit: {default: 100, type: 'int'},
|
||||
|
||||
launcher: {required: true},
|
||||
'launcher.cwd': {default: process.cwd()},
|
||||
'launcher.env': {type: 'map', default: {}},
|
||||
max_output_buffer: {default: 1024*1024, type: 'int'},
|
||||
targets: {required: true, type: 'object'},
|
||||
}
|
||||
|
@ -468,12 +468,17 @@ class Worker extends EventEmitter {
|
||||
*/
|
||||
async run(id) {
|
||||
let command = config.get('launcher').replace(/\{id\}/g, id)
|
||||
let cwd = config.get('launcher.cwd')
|
||||
let env = Object.assign({}, process.env, config.get('launcher.env'))
|
||||
|
||||
let args = command.split(/ +/)
|
||||
return new Promise((resolve, reject) => {
|
||||
this.logger.info(`run(${id}): launching`, args)
|
||||
|
||||
let process = child_process.spawn(args[0], args.slice(1), {
|
||||
maxBuffer: config.get('max_output_buffer')
|
||||
maxBuffer: config.get('max_output_buffer'),
|
||||
cwd,
|
||||
env
|
||||
})
|
||||
|
||||
let stdoutChunks = []
|
||||
|
Loading…
x
Reference in New Issue
Block a user