#javascript #node.js #linux #cron
#javascript #node.js #linux #cron
Вопрос:
Я создал скрипт узла, который я хочу запланировать с помощью cron root. Запись crontab приведена ниже.
SHELL=/bin/bash
0 1 * * * (time node /home/user/test/index.js) > /tmp/dbbackup 2>amp;1
Я могу выполнить ту же самую команду без ошибок, что и обычный пользователь или root. Однако при выполнении из планировщика он немедленно прерывается с синтаксической ошибкой
const {exec} = require('child_process');
^
SyntaxError: Unexpected token {
at exports.runInThisContext (vm.js:53:16)
at Module._compile (module.js:373:25)
at Object.Module._extensions..js (module.js:416:10)
at Module.load (module.js:343:32)
at Function.Module._load (module.js:300:12)
at Function.Module.runMain (module.js:441:10)
at startup (node.js:140:18)
at node.js:1043:3
Вчера я кое-что прочитал (с чем у меня возникли проблемы) о том, что не запущена адекватная версия Node, но после обновления я все еще вижу те же результаты.
node --version
v12.19.0
Что я здесь делаю не так? Спасибо!
Комментарии:
1. Является ли тот
node
, которыйroot
запускает ту же версию? т.е.sudo su -
иnode --version
? Поскольку вы планируете его в crontab root,node
он будет запускаться с любымnode
пользователем root, который находится на его пути.2. Спасибо за ваш ответ!
node --version
Вышеуказанное было выполнено root. Как обычное использование, так и root обновляютсяv12.19.0
и выполняют скрипт с терминала без ошибок. Мне интересно, может ли мое объявление cronSHELL=/bin/bash
что-то делать? Но это единственный способ, которым я мог понять, как обернуть мою команду time.3. Что ж, вы можете попробовать перейти
time node /path/index.js
в скрипт под /root/ и вызвать этот скрипт вместо этого. Внутри этого скрипта вы также можете запуститьnode --version
иwhich node
и вывести их где-нибудь, чтобы помочь вам увидеть, относится ли это к версии узла.4. Еще раз спасибо! Решение представляло собой комбинацию
which node
иwhereis node
. По-видимому, яv4.8.2
установил/usr/bin/node
иv12.19.0
установил/usr/local/bin/node
. Поняв это, я просто указываю, какую версию я хочу вызвать в своем cron.5. Отлично! Обязательно добавьте это в качестве ответа!
Ответ №1:
Решением была комбинация which node и whereis node. По-видимому, у меня была установлена версия 4.8.2 в /usr/bin/node, а версия 12.19.0 установлена в /usr/local/bin/node. Поняв это, я просто указываю, какую версию я хочу вызвать в своем cron.