diff --git a/setup/start/sudoers b/setup/start/sudoers index f353ba447..af148e075 100644 --- a/setup/start/sudoers +++ b/setup/start/sudoers @@ -28,5 +28,5 @@ yellowtent ALL=(root) NOPASSWD: /home/yellowtent/box/src/scripts/update.sh Defaults!/home/yellowtent/box/src/scripts/authorized_keys.sh env_keep="HOME BOX_ENV" yellowtent ALL=(root) NOPASSWD: /home/yellowtent/box/src/scripts/authorized_keys.sh -Defaults!/home/yellowtent/box/src/backuptask.js env_keep="HOME BOX_ENV" -yellowtent ALL=(root) NOPASSWD: /home/yellowtent/box/src/backuptask.js +Defaults!/home/yellowtent/box/src/scripts/node.sh env_keep="HOME BOX_ENV" +yellowtent ALL=(root) NOPASSWD: /home/yellowtent/box/src/scripts/node.sh diff --git a/src/backups.js b/src/backups.js index 502595cb6..fd110311a 100644 --- a/src/backups.js +++ b/src/backups.js @@ -47,6 +47,7 @@ var addons = require('./addons.js'), SettingsError = require('./settings.js').SettingsError, util = require('util'); +var NODE_CMD = path.join(__dirname, './scripts/node.sh'); var BACKUPTASK_CMD = path.join(__dirname, 'backuptask.js'); var NOOP_CALLBACK = function (error) { if (error) debug(error); }; @@ -178,7 +179,7 @@ function backupBoxWithAppBackupIds(appBackupIds, prefix, callback) { shell.exec('backupBox', '/bin/bash', mysqlDumpArgs, function (error) { if (error) return callback(new BackupsError(BackupsError.INTERNAL_ERROR, error)); - shell.sudo('backupBox', [ BACKUPTASK_CMD, backupId ], function (error) { + shell.sudo('backupBox', [ NODE_CMD, BACKUPTASK_CMD, backupId ], function (error) { if (error) return callback(new BackupsError(BackupsError.INTERNAL_ERROR, error)); debug('backupBoxWithAppBackupIds: success'); @@ -221,7 +222,7 @@ function createNewAppBackup(app, manifest, prefix, callback) { async.series([ fs.writeFile.bind(null, path.join(paths.APPS_DATA_DIR, app.id + '/config.json'), JSON.stringify(restoreConfig)), addons.backupAddons.bind(null, app, manifest.addons), - shell.sudo.bind(null, 'backupApp', [ BACKUPTASK_CMD, backupId, app.id ]) + shell.sudo.bind(null, 'backupApp', [ NODE_CMD, BACKUPTASK_CMD, backupId, app.id ]) ], function (error) { if (error) return callback(new BackupsError(BackupsError.INTERNAL_ERROR, error)); diff --git a/src/scripts/node.sh b/src/scripts/node.sh new file mode 100755 index 000000000..0f08caf92 --- /dev/null +++ b/src/scripts/node.sh @@ -0,0 +1,22 @@ +#!/bin/bash + +set -eu -o pipefail + +if [[ ${EUID} -ne 0 ]]; then + echo "This script should be run as root." > /dev/stderr + exit 1 +fi + +if [[ $# -eq 0 ]]; then + echo "No arguments supplied" + exit 1 +fi + +if [[ "$1" == "--check" ]]; then + echo "OK" + exit 0 +fi + +echo "Running node with memory constraints" + +/usr/bin/node --max_old_space_size=150 "$@"