svn管理

linux创建了svn之后,在客户端新建了个项目文件夹,然后创建文件提交到svn之后,去linux上搜索不到该文件,百度上说linux的存储机制有关,需要在你想要存放的地方,checkout出你需要的文件,然后每次客户端提交的时候,同步更新下。

linux svn 安装
	yum install subversion
配置

将文件创建在home下

	cd /home
	mkdir svn
	svnadmin create /home/svn
	ls svn
	当前会显示如下文件:
	conf  db  format  hooks  locks  README.txt

其中,conf文件夹是存放配置文件的,需要配置一下

	cd svn/conf
	ls
	显示如下信息
	authz  passwd  svnserve.conf

说明:
authz 是权限控制文件
passwd 是帐号密码文件
svnserve.conf 是SVN服务配置文件

配置账号密码


[root@localhost conf]# vi passwd 
[users]
test1=123456
test2=123456

配置权限

[root@localhost conf]# vi authz 
[/]
liuxianan=rw
test1=r
test2=r
*=

配置svnserve.conf

[root@localhost conf]# vi svnserve.conf 
打开下面的5个注释
anon-access = read #匿名用户可读
auth-access = write #授权用户可写
password-db = passwd #使用哪个文件作为账号文件
authz-db = authz #使用哪个文件作为权限文件
realm = /home/svn # 认证空间名,版本库所在目录
启动和停止
[root@localhost conf]# svnserve -d -r /home/svn(启动)
[root@localhost conf]#killall svnserve(停止)

上述启动命令中,-d表示守护进程, -r 表示在后台执行。停止还可以采用杀死进程的方式:

客户端连接

这里使用TortoiseSVN,输入地址svn://你的IP 即可,不出意外输入用户名和密码就能连接成功了。
默认端口3690,如果你修改了端口,那么要记得加上端口号。

相关连接:https://www.cnblogs.com/liuxianan/p/linux_install_svn_server.html

pm2常用命令
$ pm2 start app.js # 启动app.js应用程序
$ pm2 start app.js -i 4 # cluster mode 模式启动4个app.js的应用实例
# 4个应用程序会自动进行负载均衡
$ pm2 start app.js --name="api" # 启动应用程序并命名为 "api"
$ pm2 start app.js --watch # 当文件变化时自动重启应用
$ pm2 start script.sh # 启动 bash 脚本

$ pm2 list # 列表 PM2 启动的所有的应用程序
$ pm2 monit # 显示每个应用程序的CPU和内存占用情况
$ pm2 show [app-name] # 显示应用程序的所有信息

$ pm2 logs # 显示所有应用程序的日志
$ pm2 logs [app-name] # 显示指定应用程序的日志
pm2 flush

$ pm2 stop all # 停止所有的应用程序
$ pm2 stop 0 # 停止 id为 0的指定应用程序
$ pm2 restart all # 重启所有应用
$ pm2 reload all # 重启 cluster mode下的所有应用
$ pm2 gracefulReload all # Graceful reload all apps in cluster mode
$ pm2 delete all # 关闭并删除所有应用
$ pm2 delete 0 # 删除指定应用 id 0
$ pm2 scale api 10 # 把名字叫api的应用扩展到10个实例
$ pm2 reset [app-name] # 重置重启数量

$ pm2 startup # 创建开机自启动命令
$ pm2 save # 保存当前应用列表
$ pm2 resurrect # 重新加载保存的应用列表
$ pm2 update # Save processes, kill PM2 and restore processes
$ pm2 generate # Generate a sample json configuration file
pm2 start app.js --node-args="--max-old-space-size=1024"

svn自动更新设置

客户端提交的代码每次都要到指定目录更新一下才可以,比较麻烦,可以设置自动更新
进入svn钩子目录 hooks

cd  /home/svn/hooks/ 
cp post-commit.tmpl post-commit (复制这份模板文件,因为svn将要执行的是post-commit文件)
vi post-commit 

将文件最后几行注释掉
REPOS="$1"
REV=“ 2 " m a i l e r . p y c o m m i t " 2" mailer.py commit " 2"mailer.pycommit"REPOS” “$REV” /path/to/mailer.conf

然后加上自己将要执行的同步的命令

#!/bin/sh
export LANG=zh_CN.UTF-8    #(这句话比较重要,如果客户端跟服务器编码不一样会出现同步失败)
SVN_PATH=/usr/bin/svn        #代表你的svn服务文件地址 如果是通过yum安装的话,或者已经注册了svn服务,此处不需要更改
WEB_PATH=/home/www/btserve    #你的web目录(将要同步过去的web项目路径)
LOG_PATH=/tmp/svn_update.log  #同步日志
echo `whoami`,$REPOS,$REV >> $LOG_PATH
$SVN_PATH update --username admin --password 123456 $WEB_PATH --no-auth-cache >> $LOG_PATH

wq!保存退出,此时已经完成更新命令

另外执行设置post-commit文件可以执行权限

chmod  a+x  post-commit  (或者chmod  755 post-commit)

提交了几次测试了下,能正常更新了,只是每次提交之后,pm2管理的node服务每次也需要重启下

借鉴地址:https://blog.csdn.net/u011132987/article/details/79849536


之前没仔细看文档,pm2支持自动重启,svn提交代码之后,客户端访问即时生效

pm2 start ./bin/www --watch  ( 当文件变化时自动重启应用)
使用morgan写入日志

express默认导入了morgan,直接使用即可

var logger = require('morgan');
var accessLog = fs.createWriteStream('./logs/access.log', {flags : 'a'});
app.use(logger('dev'));     //打印到控制台
app.use(logger('combined', {stream : accessLog}));      //写入到log日志

会自动把请求的日志都打印到指定的文件中 初期可以不对日志进行分割 日志分割就创建当天的文件 写入即可

使用pm2查看日志记录

pm2自带了日志收集功能 通过

pm2 list # 找到要查看的项目
pm2 describe 0 # 查看详情

找到目录存放的位置就可以查看日志记录和错误日志了
我的目录在这个位置
/root/.pm2/logs/www-error.log www-out.log
通过tail -f 实时查看日志记录

在客户端新建人员之后返回列表 总是报错 网络连接失败 接口请求不到 而单独请求接口则不会出现任何问题,pm2 logs也一直出现重启报错现象 报错bin/www不是一个module

原因是因为前面使用morgan写入日志,用pm2启动项目,添加了–watch,这样每次调接口都会向项目中添加数据,而pm2检测到文件改动,就会执行restart重启命令,在重启的时候第二个接口又请求进来了,所以这时候就会出现请求接口失败的现象,解决方法是pm2 --watch的时候忽略掉这个日志文件 pm2 启动使用如下命令:

	pm2 start npm --watch -- run start
	pm2 start npm --watch --name btserver -- run start // 使用别名
	pm2 start npm --watch --ignore-watch="logs" -- run start 忽略日志

通过配置文件启动项目,在项目中实现
1.将以下PM2配置文件于package.json放到一个根目录下
2.在package.json 的scripts里添加 “pm2”: "pm2 start pm2.json"这一段代码这样我们就可以使用 npm run pm2来启动我们的Node项目
配置文件详情:

{
    "apps": {
        "name": "wuwu",                             // 项目名          
        "script": "./bin/www",                      // 执行文件
        "cwd": "./",                                // 根目录
        "args": "",                                 // 传递给脚本的参数
        "interpreter": "",                          // 指定的脚本解释器
        "interpreter_args": "",                     // 传递给解释器的参数
        "watch": true,                              // 是否监听文件变动然后重启
        "ignore_watch": [                           // 不用监听的文件
            "node_modules",
            "logs"
        ],
        "exec_mode": "cluster_mode",                // 应用启动模式,支持fork和cluster模式
        "instances": 4,                             // 应用启动实例个数,仅在cluster模式有效 默认为fork;或者 max
        "max_memory_restart": 8,                    // 最大内存限制数,超出自动重启
        "error_file": "./logs/app-err.log",         // 错误日志文件
        "out_file": "./logs/app-out.log",           // 正常日志文件
        "merge_logs": true,                         // 设置追加日志而不是新建日志
        "log_date_format": "YYYY-MM-DD HH:mm:ss",   // 指定日志文件的时间格式
        "min_uptime": "60s",                        // 应用运行少于时间被认为是异常启动
        "max_restarts": 30,                         // 最大异常重启次数,即小于min_uptime运行时间重启次数;
        "autorestart": true,                        // 默认为true, 发生异常的情况下自动重启
        "cron_restart": "",                         // crontab时间格式重启应用,目前只支持cluster模式;
        "restart_delay": "60s"                      // 异常重启情况下,延时重启时间
        "env": {
           "NODE_ENV": "production",                // 环境参数,当前指定为生产环境 process.env.NODE_ENV
           "REMOTE_ADDR": "爱上大声地"               // process.env.REMOTE_ADDR
        },
        "env_dev": {
            "NODE_ENV": "development",              // 环境参数,当前指定为开发环境 pm2 start app.js --env_dev
            "REMOTE_ADDR": ""
        },
        "env_test": {                               // 环境参数,当前指定为测试环境 pm2 start app.js --env_test
            "NODE_ENV": "test",
            "REMOTE_ADDR": ""
        }
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值