Задание Cron не запускает nodejs правильно - PullRequest
0 голосов
/ 18 ноября 2018

Это немного странно, и я понятия не имею, что делать. У меня есть небольшой узел Express API, который находится на моем Raspberry Pi, который работает Rasbian.

Файл js запускается в задании cron:

@reboot sudo /usr/bin/node /var/www/html/api/server.js &

И сам API работает нормально, я могу получить к нему доступ, и он без проблем возвращает мои запросы.

Но API также должен записывать в файл журнала, когда кто-то делает запрос:

fs.appendFile("./ServerLog.log", "[" + dateTime + "]" + " [" + status + "] " + message + "\n", null, () => {
});

Это не работает. Но когда я убиваю процесс, который был запущен через cronjob, и запускаю его вручную, он создает журнал.

Я попытался запустить узел с помощью bash, то есть:

@reboot sudo bash -c "sudo  /usr/bin/node /var/www/html/api/server.js &"

Но это ничего не изменило. Я также изменил вывод просто написать "TEST" , но это тоже не сработало. У меня есть Шебанг в начале моего файла JS: #!/usr/bin/env node

Это строки, которые выводятся в системный журнал:

Nov 18 20:20:05 raspberrypi cron[331]: (CRON) INFO (pidfile fd = 3)
Nov 18 20:20:05 raspberrypi cron[331]: (CRON) INFO (Running @reboot jobs)

А в auth.log:

Nov 18 20:20:05 raspberrypi systemd-logind[309]: New seat seat0.
Nov 18 20:20:05 raspberrypi CRON[343]: pam_unix(cron:session): session opened for user root by (uid=0)
Nov 18 20:20:05 raspberrypi CRON[343]: pam_unix(cron:session): session closed for user root
Nov 18 20:20:05 raspberrypi sudo:     root : TTY=unknown ; PWD=/root ; USER=root ; COMMAND=/usr/bin/node /var/www/html/api/server.js
Nov 18 20:20:05 raspberrypi sudo: pam_unix(sudo:session): session opened for user root by (uid=0)

Ответы [ 2 ]

0 голосов
/ 28 мая 2019

проблема в ПУТИ.

для меня я использовал serveStatic и указывал путь к статической папке, например ./public. Это решило неправильный путь. Предоставив полный URL, я смог решить проблему.

Вы можете решить ту же проблему с другими решениями, дело в том, что ваш код не разрешается в файл записи из-за PATH.

0 голосов
/ 19 ноября 2018

Вы получаете другую среду в запущенных заданиях cron, чем в интерактивной оболочке. Обычно PATH далеко не такой сложный, как в интерактивной оболочке. Проще всего это исправить - явно указать полный путь.

#!/usr/bin/env node фактически использует окружение для поиска исполняемого файла под названием «узел». Проще всего заменить его явным путем к узлу, например, #!/usr/local/bin/node или там, где он установлен в вашей системе. Чтобы найти, где он установлен: используйте which node в интерактивной оболочке.

sudo - это команда, которая позволяет запускать команду от имени другого пользователя, поэтому она не поможет вам установить значения PATH в cron, как в интерактивной оболочке.

...