Forever Node,Forever Love

Forever守护Node应用
Forever是一款用于守护Node.js应用的简单命令式守护进程,能够启动、停止、重启App应用,确保Node服务稳定运行。通过forever-monitor监控文件更新及进程状态,实现自动重启,提升应用可靠性。

前言

从 Forever 这个项目的命名看,它完全可以展现程序员的一种浪漫(守护Node,给我锁死)。

仓库地址:https://github.com/foreversd/forever

There are two ways to use forever: through the command line or by using forever in your code. Note: If you are using forever programatically you should install forever-monitor.

两种使用方式:

  1. 守护你的 Node 应用,用到“forever”。
  2. 守护其他应用,用到“forever-monitor”。

即:forever是一个简单的命令式 nodejs 的守护进程,能够启动,停止,重启App应用。forever完全基于命令行操作,在forever进程之下,创建node的子进程,通过monitor监控node子进程的运行情况,一旦文件更新,或者进程挂掉,forever会自动重启node服务器,确保应用正常运行。引用

命令笔记

安装不做赘述。

所有命令-官方文档 link

常用整理:

forever start app.js	// 启动
forever list // 显示所有服务
forever stop app.js // 停止服务
forever restartall // 启动所有服务

forever start -o out.log -e err.log app.js // 输出日志
forever start -w app.js // 监听文件改动

小结

Node 真幸福,Forever 守护它!你的 Node 服务添加守护了吗?谁会不想要一个守护呢?

#include<bits/stdc++.h> #define N 200100 #define I_love_Furina return//发电+放抄袭(?) #define forever 0 #define foreverr 1 #define int long long using namespace std; int n,T,m,q,head[N],op[N],num,f[N][20],dep[N]; struct node{int to,nxt;}a[N*2]; inline void add(int u,int v){a[++num].to=v,a[num].nxt=head[u],head[u]=num;} inline void solve(){//求最近传送阵距离 queue<int> q; for(int i=1,x;i<=m;i++)cin>>x,q.push(x),op[x]=0;//把所有的传送阵位置压入队列,跑bfs while(!q.empty()){ int u=q.front(); q.pop(); for(int i=head[u];i;i=a[i].nxt){ int v=a[i].to; if(op[v]!=-1)continue;//避免重复遍历 op[v]=op[u]+1,q.push(v); } } I_love_Furina ; } void dfs(int x,int fa){ f[x][0]=fa,dep[x]=dep[fa]+1; for(int i=1;i<=19&&f[f[x][i-1]][i-1];i++)f[x][i]=f[f[x][i-1]][i-1];//计算祖宗 for(int i=head[x];i;i=a[i].nxt)if(a[i].to!=fa)dfs(a[i].to,x); I_love_Furina ; } inline int lca(int x,int y){//求最近公共祖先 if(dep[x]<dep[y])swap(x,y); for(int i=19;i>=0;i--)if(dep[f[x][i]]>=dep[y])x=f[x][i]; if(x==y)I_love_Furina x; for(int i=19;i>=0;i--)if(f[x][i]!=f[y][i])x=f[x][i],y=f[y][i]; I_love_Furina f[x][0];//注意,是返回x的父亲 } signed main(){ ios::sync_with_stdio(0);cin.tie(0);cout.tie(0); cin>>n>>m>>q; for(int i=1,u,v;i<n;i++)cin>>u>>v,add(u,v),add(v,u),op[i]=op[i+1]=-1; dfs(1,0),solve();//跑lca和最近传送阵距离 while(q--){ int x,y; cin>>x>>y; int LCA=lca(x,y); //cout<<lca(x,y)<<" "<<op[x]<<" "<<op[y]<<endl; cout<<min(dep[x]-dep[LCA]+dep[y]-dep[LCA],(op[x]==-1||op[y]==-1?3156781267:op[x]+op[y]))<<endl;//A:防止输出-2 } I_love_Furina forever; } 二者有什么不同
最新发布
07-29
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值