我使用 forever 在 node.js 上运行我的 Ghost 博客平台。据我所知,forever 应该监视节点是否掉线并自动重新启动。但是,如果我从应用程序下拉出数据库,当数据库再次可用时,它不会按预期恢复。日志如下:
r31c.log:Error: Connection lost: The server closed the connection.
r31c.log:error: Forever detected script exited with code: 8
r31c.log:error: Forever restarting script for 1 time
r31c.log:ERROR: connect ECONNREFUSED, sql: create table `posts` (`id` int(11) unsigned
not null not null auto_increment primary key, `uuid` varchar(36) not
null, `title` varchar(150) not null, `slug` varchar(150) not null,
`markdown` text, `html` text, `image` text, `featured` tinyint(1) not
null default '0', `page` tinyint(1) not null default '0', `status`
varchar(150) not null default 'draft', `language` varchar(6) not null
default 'en_US', `meta_title` varchar(150), `meta_description`
varchar(200), `author_id` int(11) not null, `created_at` datetime not
null, `created_by` int(11) not null, `updated_at` datetime,
`updated_by` int(11), `published_at` datetime, `published_by` int(11))
default character set utf8,alter table `posts` add unique
posts_slug_unique(`slug`), bindings:
r31c.log:error: Forever detected script was killed by signal: null
r31c.log: throw arguments[1]; // Unhandled 'error' event
r31c.log:Error: Cannot stop process that is not running.
答案1
在生产环境中,我强烈建议尝试使用乘客独立而不是永远,以增加实例的稳健性和可靠性:
如果您仍想永久使用,您可以通过编写脚本来检查永久实例是否启动,如果关闭,则启动它。
不过,检查与数据库的连接应该是一个应用问题。