jobd: support launcher environment settings

This commit is contained in:
Evgeny Zinoviev 2021-03-27 16:57:05 +03:00
parent 832055d922
commit 0327f8962f
4 changed files with 22 additions and 1 deletions

View File

@ -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

View File

@ -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]

View File

@ -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'},
}

View File

@ -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 = []