所以设置是...
Docker>主管> Cron> NodeJS任务。
我目前正在让我的主管使用当前主管设置将其日志和错误日志输出到docker。
[program:cron]
command=cron -f
startsecs=10
priority=100
autostart=true
autorestart=true
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0
这显示了cron任务正在运行,即
app_1 | 'Supervisord is running as root and it is searching '
app_1 | 2016-08-26 12:54:30,519 CRIT Supervisor running as root (no user in config file)
app_1 | 2016-08-26 12:54:30,519 WARN Included extra file "/etc/supervisor/conf.d/supervisord.conf" during parsing
app_1 | 2016-08-26 12:54:30,536 INFO RPC interface 'supervisor' initialized
app_1 | 2016-08-26 12:54:30,536 CRIT Server 'unix_http_server' running without any HTTP authentication checking
app_1 | 2016-08-26 12:54:30,537 INFO supervisord started with pid 8
app_1 | 2016-08-26 12:54:31,542 INFO spawned: 'cron' with pid 11
app_1 | 2016-08-26 12:54:41,584 INFO success: cron entered RUNNING state, process has stayed up for > than 10 seconds (startsecs)
但是,它没有显示我的NodeJS应用程序中的任何内容。
如果我从终端运行NodeJS应用程序,并且nodejs index.js
得到的console.log
输出与我期望的一样。
我知道如何从主管运行我的NodeJS输出(与上面的cron设置相同),但是从cron触发它却是不同的。
现在我怀疑我要出问题的地方是我在crontab中将日志重定向到的位置...?
我的crontab当前如下所示(运行简单的ubuntu:14.04
docker映像)...
* * * * * cd /home/app && nodejs /home/app/index.js >> /var/log/supervisor/supervisord.log 2>&1
这完美地触发了该应用程序。
我还可以通过跳入容器并运行来查看日志cat /var/log/supervisor/supervisord.log
。它既显示了我的应用程序的输出,也显示了我上面粘贴的cron输出。但是它没有出现在上docker-compose logs -f
。
帮助非常感谢!
因此,这可能不是最好的方法,但是它对我有用,所以嘿!
首先,在我中,Dockerfile
我这样生成了一个空白日志...
RUN touch /var/log/cron.log
然后我修改了我的crontab文件以输出到这里...
* * * * * cd /home/app && nodejs /home/app/index.js >> /var/log/cron.log 2>&1
然后我在我的主管配置中添加了一个部分来记录日志...
[program:cronlogs]
command=tail -f /var/log/cron.log
startsecs=20
priority=200
autostart=true
autorestart=true
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
可以工作,原因touch
是,这样就不会出现文件不存在的错误,因为在cron尝试写入该文件之前,不存在任何日志文件。
期待这种解决方案是否存在问题,或者有人是否有更好的解决方案...
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句