最近認證阿里雲學生用戶,參與ESC服務器9.9元/月的活動,準備先搭建一個博客網站,寫寫自已的心得以及經驗。以前也搭建過網站,最後因爲我的沒時間(沒時間是假的,就是懶。哈哈)的緣由致使最後服務器到期,域名被回收。累覺不愛楽、
新站準備經過Hexo來構建(Hexo是基於NodeJs),文章經過github託管。經過腳原本實現自動更新,自動發佈等功能。也採用Linux別名的方式來簡化命令。作一個效率猿,不作重複的事情,不浪費時間。
linux
Linux下 給命令起別名是經過 alias命令
大體語法格式: alias name= ’ command ’
若是直接在console中鍵入別名命令,只能在本次環境中生效,當服務器重啓或者關機等異常狀況,配置的別名會丟失。通常都是保存至開機啓動文件中,保證自已的別名無論在什麼狀況下都會生效。
通常都會把別名命令存放至 ~/.bashrc 文件中。 經過source ~/.bashrc
讓配置的別名生效。git
如我在服務器中配置的命令別名:github
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 console ,有點low。 多多包涵,哈哈。。。shell
大體功能:
1.啓動hexo服務
2.關閉hexo服務
3.得到hexo pid
4. 自動更新
5. 自動部署githubjson
shell:bash
#!/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
將console shell
中autoDeploy
的方法,獨立於一個腳本(hexo-deploy.sh)中,經過Linux下的crontab定時器,配置指定的時間規則,定時執行腳本便可實現需求。服務器
如我配置的天天23:30自動部署:hexo
30 23 * * * root "sh /opt/blog/hexo-deploy.sh >> /tmp/test.txt"
app
遇到的坑網站
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
的時候,殺死了不存在的進程或者異常進程致使。