EC2 cron作业未执行我的Node.js脚本

时间:2019-09-20 05:54:09

标签: node.js ubuntu amazon-ec2 vim cron

我想在EC2主机上使用cron job在项目文件夹中执行一个node.js脚本。我知道这个论坛上已经问过很多次这个问题了,我按照答案回答了自己的所在,但我很难获得结果。

在我的根目录下,有两个文件夹: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语法是正确的。那么,似乎是什么问题呢?我需要为vim文件中的node和test.js提供不同的路径语法吗?

谢谢。

2 个答案:

答案 0 :(得分:1)

引用this

  

Cron不会使用您打开的终端运行命令。它在后台运行作业

如果您真的想查看输出,请参见this answer

但这不是您想要的。您想将后台作业的输出重定向到某些日志文件:

*/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

答案 1 :(得分:1)

这可以通过创建脚本并通过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天的日志,并将其删除。只需在脚本中添加这一行,日志就会得到照顾。