我想在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提供不同的路径语法吗?
谢谢。
答案 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天的日志,并将其删除。只需在脚本中添加这一行,日志就会得到照顾。