diff --git a/src/backups.js b/src/backups.js index 9b31a1386..6464ad84d 100644 --- a/src/backups.js +++ b/src/backups.js @@ -379,6 +379,8 @@ function download(backupId, format, dataDir, callback) { assert.strictEqual(typeof dataDir, 'string'); assert.strictEqual(typeof callback, 'function'); + safe.fs.unlinkSync(paths.BACKUP_LOG_FILE); // start fresh log file + log(`Downloading ${backupId} of format ${format} to ${dataDir}`); settings.getBackupConfig(function (error, backupConfig) { @@ -436,7 +438,8 @@ function runBackupTask(backupId, format, dataDir, callback) { var killTimerId = null, progressTimerId = null; - var cp = shell.sudo(`backup-${backupId}`, [ BACKUPTASK_CMD, backupId, format, dataDir ], { env: process.env, logFile: paths.BACKUP_LOG_FILE }, function (error) { + var logStream = fs.createWriteStream(paths.BACKUP_LOG_FILE, { flags: 'a' }); + var cp = shell.sudo(`backup-${backupId}`, [ BACKUPTASK_CMD, backupId, format, dataDir ], { env: process.env, logStream: logStream }, function (error) { clearTimeout(killTimerId); clearInterval(progressTimerId); @@ -461,6 +464,11 @@ function runBackupTask(backupId, format, dataDir, callback) { debug('runBackupTask: backup task taking too long. killing'); cp.kill(); }, 4 * 60 * 60 * 1000); // 4 hours + + logStream.on('error', function (error) { + debug('runBackupTask: error in logging stream', error); + cp.kill(); + }); } function getSnapshotInfo(id) { diff --git a/src/shell.js b/src/shell.js index 94827c886..5d94d799b 100644 --- a/src/shell.js +++ b/src/shell.js @@ -42,10 +42,9 @@ function exec(tag, file, args, options, callback) { debug(tag + ' execFile: %s', file); // do not dump args as it might have sensitive info var cp = child_process.spawn(file, args, options); - if (options.logFile) { - var logFile = fs.createWriteStream(options.logFile, { flags: 'a' }); - cp.stdout.pipe(logFile); - cp.stderr.pipe(logFile); + if (options.logStream) { + cp.stdout.pipe(options.logStream); + cp.stderr.pipe(options.logStream); } else { cp.stdout.on('data', function (data) { debug(tag + ' (stdout): %s', data.toString('utf8')); diff --git a/src/storage/filesystem.js b/src/storage/filesystem.js index ade73ded0..9ba9f75f0 100644 --- a/src/storage/filesystem.js +++ b/src/storage/filesystem.js @@ -76,7 +76,7 @@ function download(apiConfig, sourceFilePath, callback) { callback(null, fileStream); } -function downloadDir(apiConfig, backupFilePath, destDir, callback) { +function downloadDir(apiConfig, backupFilePath, destDir) { assert.strictEqual(typeof apiConfig, 'object'); assert.strictEqual(typeof backupFilePath, 'string'); assert.strictEqual(typeof destDir, 'string');