EC2 не выполняет мой сценарий Node.js - PullRequest
0 голосов
/ 20 сентября 2019

Я хочу выполнить скрипт node.js в папке моего проекта с помощью задания cron на моем хостинге EC2.Я знаю, что этот вопрос задавался много раз на этом форуме, и я следил за ответами, чтобы достичь того, где я нахожусь, но у меня возникают трудности с получением результата.

На моем корневом уровне есть две папки: home и usr

Мой узел живет в / usr / bin / node (which node дает этот путь)

Файл моего узла живет в / home / ubuntu / my-crm-app / test.js

В test.js есть только один console.log("this is a test") - но я напишу больше кода позже, если это сработает.

Теперь, если явыполнить /usr/bin/node /home/ubuntu/my-crm-app/test.js из любого места, где он печатает журнал,

На самом деле, даже если я сделаю node /home/ubuntu/my-crm-app/test.js, он напечатает журнал.Таким образом, это означает, что мои пути к узлу и файлу проекта верны и работают.

Я набрал crontab -e в системе и выбрал vim basic в качестве редактора для написания задания cron.Это выглядит примерно так:

# Edit this file to introduce tasks to be run by cron.
# 
# Each task to run has to be defined through a single line
# indicating with different fields when the task will be run
# and what command to run for the task
# 
# To define the time you can provide concrete values for
# minute (m), hour (h), day of month (dom), month (mon),
# and day of week (dow) or use '*' in these fields (for 'any').# 
# Notice that tasks will be started based on the cron's system
# daemon's notion of time and timezones.
# 
# Output of the crontab jobs (including errors) is sent through
# email to the user the crontab file belongs to (unless redirected).
# 
# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
# 
# For more information see the manual pages of crontab(5) and cron(8)
# 
# m h  dom mon dow   command
*/1 * * * * /usr/bin/node /home/ubuntu/my-crm-app/test.js

Поэтому я хочу запускать журнал каждую минуту.Я сохраняю файл vim и выхожу из него, жду и жду, и ничего не происходит.Из того, что я понимаю, мой синтаксис cron является правильным.Так в чем проблема?Нужно ли указывать другой синтаксис пути для узла и моего test.js в файле vim?

Спасибо.

Ответы [ 2 ]

1 голос
/ 20 сентября 2019

Это то, чего вы можете достичь, создав сценарий и вызвав его через cron.

Просто создайте сценарий с именем cronjob.sh:

#!/bin/bash
/usr/bin/node /home/ubuntu/my-crm-app/test.js >> /var/log/my-crm-app`date`.log

Приведенная выше команда запускает программу вашего узлаи будет генерировать журналы.Вы можете в любое время обратиться к этим журналам, чтобы увидеть выполнение команды и любые ошибки, если они есть.

Ваш cron будет выглядеть так:

*/1 * * * * /path/to/script/cronjob.sh

Просто дайте разрешение этому файлу chmod +x /path/to/script/cronjob.sh

Поскольку эта команда будет выполняться каждую минуту и ​​создавать журналы, просто позаботьтесь об удалении этих файлов журналов через определенный промежуток времени, чтобы избежать высокого использования диска.

find /path/to/logs  -name "<filename>*.log" -mtime +30 | xargs rm -f

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

1 голос
/ 20 сентября 2019

Цитирование this :

Cron не запускает команды, используя терминал, который вы открыли.Он запускает задания в фоновом режиме

Если вы действительно хотите увидеть вывод, посмотрите этот ответ .

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

*/1 * * * * /usr/bin/node /home/ubuntu/my-crm-app/my_launcher.sh

, где my_luncher.sh делает

#!/bin/bash
/usr/bin/node /home/ubuntu/my-crm-app/test.js &> /var/log/my-crm-app.log
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...