灵感

    最近认证阿里云学生用户,参与ESC服务器9.9元/月的活动,准备先搭建一个博客网站,写写自已的心得以及经验。之前也搭建过网站,最后由于个人没时间(没时间是假的,就是懒。哈哈)的原因导致最后服务器到期,域名被回收。累觉不爱楽、 
    
    新站准备通过Hexo来构建(Hexo是基于NodeJs),文章通过github托管。通过脚本来实现自动更新,自动发布等功能。也采用Linux别名的方式来简化命令。做一个效率猿,不做重复的事情,不浪费时间。 
   

linux 命令名

   Linux下 给命令起别名是通过 alias命令 
   大致语法格式: alias name= ’ command ’ 
    
   如果直接在console中键入别名命令,只能在本次环境中生效,当服务器重启或者关机等异常情况,配置的别名会丢失。一般都是保存至开机启动文件中,保证自已的别名不管在什么情况下都会生效。 
    
   一般都会把别名命令存放至 ~/.bashrc 文件中。 通过source ~/.bashrc让配置的别名生效。

   如我在服务器中配置的命令别名:

     alias vwc='vi /opt/blog/_config.yml'  #编辑站点文件
alias vwtc='vi /opt/blog/themes/next/_config.yml' #编辑主题文件
alias cdblog='cd /opt/blog' #切换到博客目录
alias hs='nohup hexo server -p 80 >/dev/null 2>&1 &' #启动hexo
alias hst="sh /opt/blog/killhexo.sh " #停止hexo
alias psh='ps -ef | grep hexo' #查看hexo 进程

hexo cmd console

  自已编写的hexo console ,有点low。 多多包涵,哈哈。。。


    
    大致功能: 
       1.启动hexo服务 
       2.关闭hexo服务 
        3.获得hexo pid 
        4. 自动更新 
        5. 自动部署github

    shell:

#!/bin/bash

function initUI() 
{ while [ true ]
do
echo ""
echo "------------------------"
echo "----- h e x o -----"
echo "------------------------" echo " 1. start server "
echo " 2. shutdown server "
echo " 3. hexo pid "
echo " 4. auto update "
echo " 5. auto deploy "
echo -n " Please enter : " read num if [ -z $num ];then
exit 0
elif [ $num = 1 ];then
startServer
elif [ $num = 2 ];then
stopServer
elif [ $num = 3 ];then
getPID
elif [ $num = 4 ];then
autoUpdate
startServer
elif [ $num = 5 ];then
autoDeploy
else
echo "Input error !!!!!!"
fi
done
} function startServer()
{
cd /opt/blog
nohup hexo server -p 80 >/dev/null 2>&1 &
echo -n "start server sucess !!! PID ::: "
getPID
} function stopServer()
{
ps -ef|grep hexo |grep -v grep | grep -v /bin/bash| awk '{print $2}' | xargs kill -9 >> /dev/null
echo "stop hexo success !!! "
} function getPID()
{
ps -ef | grep hexo | grep -v grep | grep -v /bin/bash | awk '{print $2}'
echo ""
} function autoUpdate()
{ chkHexo=`ps -ef|grep hexo |grep -v grep | grep -v /bin/bash |awk '{print $2}'`
if [[ -z $chkHexo ]];then
echo " hexo server is stop !!! "
else
stopServer
fi echo ""
cd /opt/blog
rm -rf db.json
hexo clean
hexo generate } function autoDeploy()
{ autoUpdate /usr/bin/expect <<-EOF
spawn hexo deploy
expect "Username"
send "$gitUn\r" #github UserName
expect "Password"
send "$gitPwd\r" #github Password
interact
expect eof
EOF startServer } clear
initUI

定时部署github

  将console shell中autoDeploy的方法,独立于一个脚本(hexo-deploy.sh)中,通过Linux下的crontab定时器,配置指定的时间规则,定时执行脚本即可实现需求。

  如我配置的每天23:30自动部署:

  30 23 * * * root "sh /opt/blog/hexo-deploy.sh >> /tmp/test.txt"

  • 遇到的坑

        Q : crontab内环境变量与Shell环境变量不一致? 
        A : 比如,我在脚本中使用hexo命令,但是hexo命令在/usr/local/bin下面。crontab环境的PATH没有指定这个目录配置,导致这个命令差找不到。自动化操作一致不成功,解决办法是在/etc/profile中的PATH后面追加:/usr/local/bin。在脚本部署的头部添加. /etc/profile即可。

        Q:Linux命令自动交互?expect command not found 
        A : yum install -y expect

        Q:执行脚本,直接返回killed,脚本直接结束? 
        A:有可能kill -9的时候,杀死了不存在的进程或者异常进程导致。

 

Hexo 自动同步的更多相关文章

  1. CentOS 创建SVN 服务器,并且自动同步到WEB 目录

    CentOS 创建SVN 服务器,并且自动同步到WEB 目录 标签: centossvnsubversion服务器 2013-12-06 10:09 5492人阅读 评论(0) 收藏 举报  分类: ...

  2. TFS 自动同步Server 端文件的批处理命令

    TFS 自动同步Server 端文件的批处理命令 目前在我们组的工作中很多时候需要将TFS上Server端的代码自动无人值守的同步到本地中来, 找到了一些解决方案的资料http://bbs.scmro ...

  3. Chrome编辑了样式或者JS之后自动同步回本地工程

    比如我用HBuilder进行调试,在Chrome上修改了几个样式,我们通常的做法是,拷贝修改后的地方,然后再进行覆盖. 现在有了全自动的操作,在Chrome上修改了样式之后,通过Sources的Sav ...

  4. 从svn服务器自动同步到另一台服务器

    需求场景 A commit B post-commit C (workstation) --------------> (svn server) ---------------------> ...

  5. Linux下svn提交文件后自动同步更新到网站目录

    有时,对于多文件需要上传到服务器的时候将会很麻烦,但是如果使用svn的钩子脚本就容易实现本地提交svn后,自动同步代码文件到远程服务器的网站目录下,而不必手动上传了. 首先,在网站目录下checkou ...

  6. svn提交自动同步到web目录

    环境:CentOS6.5  测试线   svn和web服务器在同一台机器上   SVN版本1.6 情景:在测试环境下,开发部提出希望提交到SVN的代码能自动同步到WEB站点目录下,解决每次都要传双份这 ...

  7. unison+inotify实现文件双向自动同步

    nfs适合存小图片和小文件,有一个致命的缺点,就是其中一台web服务挂掉之后,会直接导致web页面无法访问,动态的那种数据, 而且数据量很大的数据不适合nfs Unison是一款跨平台(window, ...

  8. 怎么让CentOS集群自动同步时间

    怎么让CentOS集群自动同步时间?首先机器要连外网,这样才能从互联网上同步时间,这是首先要了解的.好了,主要的方法如下: 在除了运行ntpd之外的机器上,执行: [html] # chkconfig ...

  9. 定时自动同步文件,支持多文件夹同步,支持过滤文件和文件夹,解决FileSystemWatcher多次文件触发事件(源码)

    博客园里面有很多同步工具和软件,关于FileSystemWatcher类解释的也很多,但收集了很多文章后,感觉没好的方法,自己没事写了一个定时文件同步,借鉴了很多博客园朋友的东西: 上主菜: 配置文件 ...

随机推荐

  1. [Javascript] String Padding in Javascript using padStart and padEnd functions

    ES2017 added two new string functions. They are padStart and padEndfunctions. In this lesson, we wil ...

  2. iOS6和iOS7处理push不同之处,解决反复push,-(void) application: didReceiveRemoteNotification: fetchCompletionHandl

    如果读者已经知道push的基本知识,本文仅仅是解决一些适配,兼容问题.如果对push 不甚了解,參考以下的文章 1.[iOS push全方位解析](一) push的概述 2.[iOS push全方位解 ...

  3. 又见关系并查集 以POJ 1182 食物链为例

    简单的关系并查集一般非常easy依据给出的关系搞出一个有向的环,那么两者之间的关系就变成了两者之间的距离. 对于此题: 若u.v不在一个集合内,则显然此条语句会合法(暂且忽略后两条.下同). 那么将f ...

  4. echarts 地图 动态 展示 结合css+js

    echarts地图展示功能非常强大,官网上静态展示的样例非常多了,动态的资料少.研究了下.我眼下实现的通过ajax从server获取数据动态展示地图. 另外,我们有时候希望在地图之上做些自己定义的东西 ...

  5. 建筑建模学习笔记2——3DMax房屋框架建模

    以下这幅图是用3DMax做出的大体的框架 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I ...

  6. C# 解压及压缩文件源代码

    using System.IO; using System.Windows.Forms; using ICSharpCode.SharpZipLib.Zip; using ICSharpCode.Sh ...

  7. bzoj1801: [Ahoi2009]chess 中国象棋(DP)

    1801: [Ahoi2009]chess 中国象棋 题目:传送门 题解: 表示自己的DP菜的抠脚 %题解... 定义f[i][j][k]表示前i行 仅有一个棋子的有j列 有两个棋子的有k个 的方案数 ...

  8. hpuoj--校赛--爬楼梯(模拟)

    问题 E: 感恩节KK专场--爬楼梯 时间限制: 1 Sec  内存限制: 1000 MB 提交: 382  解决: 89 [提交][状态][讨论版] 题目描述 来机房比赛的时候大家都会爬楼梯,但是每 ...

  9. rsync同步操作命令

    在本地磁盘同步数据 将/home做个备份 # rsync -a --delete /home /backups -a 归档模式,表示以递归方式传输文件, -delete 删除那些接收端还有而发送端已经 ...

  10. Wow C++11

    什么是C++11? 一句话C++11是最新的C++标准,在2011年发布,所以叫C++11.在新的标准出现前,我们一直在用的是C++98,可想而知这份标准是1998年发布的,之后再2003年最过小的修 ...