Сжатие узла требует прерывания Cron

#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 и выполняют скрипт с терминала без ошибок. Мне интересно, может ли мое объявление cron SHELL=/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.