利用crontab定时提交svn遇到的几个问题
交待下背景。。。公司开发组只有技术经理有服务器和数据库权限,还只是开发环境的。。因为工作安排和权限限制,测试同学上线的时候,需要本人帮开发组的部分同事review代码并把代码提交到trunk。一开始手动diff文件review没问题后copy上传,时间久了,同事间建立了牢固的信任,非重要文件也就不需要review了。嫌麻烦写了个shell脚本(trunk.sh),把需要传的文件和comment分别放在俩文件里(fileList和comment),手动执行脚本,脚本对文件校验处理后copy到trunk目录,然后svn commit到trunk。最近开发同学频繁改动上线,测试同学拼命的向我发文件,严重影响本人的开发工作,终于让我有动力写了一个小系统。在开发服务器上弄了个登录后可以提交需要上传的文件的表单,给测试同学分配了账号密码,测试同学登录后填写文件列表和改动说明提交后过滤重要文件后保存到memcached。我在本地写了个脚本(getTask.php)用crontab定时每分钟请求开发服务器的task.php(task.php的作用是查到memcached的新任务就输出并删除此任务),getTask.php请求到新任务就把文件和coment写在之前的fileList(fileList一行写一个文件名,这里有个坑,当只有一个文件时,如果不在文件名后面加个换行,shell read line读不出来,和手动复制的diff会显示No newline at end of file)和comment,并把时间戳写在current_task_time文件里。另外一个脚本(autosvn.sh)每分钟比较current_task_time和last_task_time,如有不同就执行`cp current_task_time last_task_time`并执行trunk.sh,如果current_task_time和last_task_time相同不执行任何操作。
背景交代完毕,下面就说一下crontab 定时提交svn遇到的坑。首先是trunk.sh手动执行可以(当然,一年内都用了无数次了)。但是用crontab定时执行,收到了报错邮件。百度搜到的两个错误都让我遇到了。
1. 脚本中用了相对路径。脚本中确实为了方便用了一些相对路径。解决方法脚本中统一用绝对路径。
2. 中文乱码问题,在脚本开始加入export LANG=en_US.UTF-8。
3. crontab环境变量和手动执行运行的环境变量不一样。在脚本用加入env,发现确实输出不一样。解决办法:在定时脚本前面加入source ~/.bash_profile,这种方法很大程度上也能解决前面的两个问题。
解决了这俩问题。
发现又报了俩svn的错误
svn: E170013: Unable to connect to a repository at URL 'https://svn.*****.com:10443/******'
svn: E215004: No more credentials or we tried too many times.
Authentication failed
网上搜了很多都找不到解决办法。最后问了下大神同学说我手动执行的时候输入过账号密码并缓存了下来。crontab没有帮我输入账号密码,问我crontab是用的当前登陆用户吗,我说是啊。同学也没辙,让我搜一下svn免登录。没搜到。尝试带上--username和--password,执行成功了。我以为我终于大功告成了。。。
但是我自己要提交代码时,手动svn up竟然也要输入密码了。搞不清svn账号密码的缓存机制。猜想应该crontab执行时输入了账号密码但是没有保存密码,所以把我之前缓存的密码冲掉了。
思路进入两难的境地,定时svn脚本免密了能成功,我自己提交却要输入密码。自己输入完密码并记住后,定时脚本又记不住。。。
后来搜到了 --no-auth-cache 然后我故意svn up --no-auth-cache 不输密码,连按三个回车.报了错。
svn: E215004: No more credentials or we tried too many times.
Authentication failed
恍然大悟,原来crontab即使和手动执行svn一样的用户,也不会此用户之前缓存的密码,而且由于无法输入账号密码,继续往下运行,所以会报svn: E215004的多次输入错误的报错。这里有俩疑惑:
第一,为啥crontab不用我缓存的密码。
第二。如何让crontab支持我手动输入密码并缓存下来(网上有用expect脚本可以替用户输入账号密码)。
最后尝试trunk.sh 里svn命令都带上--username myaccount --password mypassword 以及 --no-auth-cache,执行成功,然后手动执行svn也没再让我输入账号密码。
但我还是觉得脚本里带上svn账号密码不舒服,等有时间再好好找找如何配置svn使得crontab执行svn免登录吧。
利用crontab定时提交svn遇到的几个问题的更多相关文章
- Linux命令之Crontab定时任务,利用Crontab定时执行spark任务
Linux命令之Crontab定时任务,利用Crontab定时执行spark任务 一.Linux命令之Crontab定时任务 1.1 常见Crontab任务 1.1.1 安装crontab 1.1.2 ...
- 利用crontab定时备份数据库为sql文件
测试: 每1分钟执行1次,利用crontab */1 * * * * /opt/nginx/db_bak.sh 每天的0点0分把数据库备份为日期格式 0 0 * * * /opt/nginx/db_b ...
- 利用crontab定时备份nginx访问日志(也可以说是定时切分日志)
在我们的工作中,肯定会涉及到分析访问日志. 但是如果访问日志都集中存在于一个文件中,那数据量就太大了,并且也不利于我们进行分析. 所以我们需要对访问日志进行按时间切割. 思路: 我们可以利用linux ...
- 利用crontab定时重启centos
起因 前一段买了aliyun的ecs的最低配版,大概配置是centos 7,512内存,20G空间. 部署了几个站点,虽然网站已经做了一定的静态化,但还是会出现内存不够用的情况,这个时候,系统会停掉一 ...
- Centos7 利用crontab定时执行任务及配置方法
crond是什么? crond 和crontab是不可分割的.crontab是一个命令,常见于Unix和类Unix的操作系统之中,用于设置周期性被执行的指令.该命令从标准输入设备读取指令,并将其存放于 ...
- 利用crontab自动更新SVN代码
shell.sh#!/bin/sh source ~/.bash_profile LANG=en_US.UTF- cd /opt/web/hzcms/ svn up >> /opt/web ...
- Centos7:利用crontab定时执行任务
cron服务是Linux的内置服务,但它不会开机自动启动.可以用以下命令启动和停止服务: /sbin/service crond start /sbin/service crond stop /sbi ...
- Centos 7下利用crontab定时执行任务详解
一 cron服务 cron服务是Linux的内置服务,但它不会开机自动启动.可以用以下命令启动和停止服务: /sbin/service crond start /sbin/service crond ...
- linux crontab定时执行
#利用crontab定时执行url研究了两种简单方式#一利用lynx访问url yum install lynxservice crond startcrontab -einsert键* * * * ...
随机推荐
- saiku环境搭建
说明:搭建saiku环境,BI展示工具. 环境说明: os:windows7 jdk:jdk1.6.0_43 tomcat:apache-tomcat-7.0.62 saiku:saiku-ui-2. ...
- 如何使用java validation api进行参数校验----Hibernate-Validation
在日常开发中,Hibernate Validator经常用来验证bean的字段,基于注解,方便快捷高效. 1. Bean Validation 中内置的 constraint 注解 ...
- Java实现遍历N级树形目录结构
最近挺忙,一直在做项目,然后有个树形目录结构需要返回给前端,这里给大家说一下实现的思路. 具体达到的效果类似: 一级目录A: 二级目录A: 三级目录: 四级目录: 文件.txt 二级目录B: 文件1. ...
- Python爬虫【实战篇】scrapy 框架爬取某招聘网存入mongodb
创建项目 scrapy startproject zhaoping 创建爬虫 cd zhaoping scrapy genspider hr zhaopingwang.com 目录结构 items.p ...
- Installing the Ranger Kafka Plug-in
This section describes how to install and enable the Ranger Kafka plug-in. The Ranger Kafka plug-in ...
- centos7下安装docker(dockerfile常用的指令)
FROM:指定ase镜像 MAINTAINER:设置镜像作者,可以是任意字符 COPY:将文件从build context复制到镜像.支持两种形式:1.COPY src dest 2.COPY [“ ...
- vue项目接口域名动态获取
需求: 接口域名是从外部 .json 文件里获取的. 思路: 在开始加载项目前 进行接口域名获取,然后重置 接口域名的配置项. 实现: 1.config/index.js 文件 进行基础配置 impo ...
- CSS3 animation 与JQ animate()的区别
CSS3 与 JQ 根本区别 css3 animation与jQuery animate()区别在于实现机制不同 C3和JQ 完成动画的优缺点 1.css3中的过渡和animation动画都是基于cs ...
- [wiki] Unix like
1. Unix的发展历史 2. 纵向的图 3. 来源: https://zh.wikipedia.org/wiki/类Unix系统 4. 中文版 数种“类UNIX操作系统”的相互关系图 类Unix ...
- plus webview关闭事件监听
plus.webview.currentWebview().addEventListener("close",function(){ },false);