刚上线了一个简单的需求,有赞商城 和 公司数据库的内部订单自动同步。
程序逻辑并不难,难点在于程序一直静默跑在服务器上,如果出问题也很难发现。
设计问题
同步程序一直跑在服务器上,如果不经常去翻错误日志,或者前台客服主动发现了错误的话,很难发现程序内容错误。
那么这个程序首先需要一个合理的记录日志和报错通知的机制。
- 在 node 的 log 里记录内容有限,定位问题时携带的信息越多越好。
- 在重要错误发生,需要人工处理的时候,及时通过邮件通知。
在实现的时候需要注意这两点。
日志记录
Linux给程序提供三种I/O:
标准输入(standard input) -0 默认接受来自键盘的输入
标注输出(standard output) -1 默认输出到终端窗口
标准错误(standard erroe) -2 默认输出到终端窗口
大多数 UNIX 系统命令从你的终端接受输入并将所产生的输出发送回到终端。当然这些产生到输出也可以通过重定向来返回到指定到地方(比如日志文件)
以下是几个重定向命令:
command | description |
---|---|
> filename | 标准输出重定向到指定file(覆盖) |
>> filename | 标准输出重定向到指定file(不会被覆盖) |
2> filename | 错误输出重定向到指定file |
&> filename | 把所有输入重定向到文件 |
在nodejs中的console的log及error方法携带信息有限,不变定位问题,需要对log进行一些拓展。在npm中有许多实现拓展功能的库,比如debug,funcylog,chalk之类,需要根据实际项目进行选择。
发送邮件使用了一个叫做 nodemailer 的库,配置简单易懂,可以尝试。
Crontab
crontab是一个常用命令,用于设置周期性被执行的指令。
crontab文件包含送交cron守护进程的一系列作业和指令。每个用户可以拥有自己的crontab文件;同时,操作系统保存一个针对整个系统的crontab文件,该文件通常存放于/etc或者/etc之下的子目录中,而这个文件只能由系统管理员来修改。 ——Wikipedia
文件格式说明
——分钟(0 - 59)
| ——小时(0 - 23)
| | ——日(1 - 31)
| | | ——月(1 - 12)
| | | | ——星期(0 - 7,星期日=0或7)
| | | | |
* * * * * 被执行的命令
一个user下最好设置一个crontab文件方便管理,也可以通过 crontab -e
来直接修改默认文件
crontab文件中的文件路径应为绝对路径,以及最好在每条crontab命令上方写上对应频率内容。