我運行以下的bash腳本中的cronjob來更新我的網站混帳拉檢查文件是否改變慶典
#!/bin/bash
cd /home/username/public_html
git pull origin master
此的cronjob運行每5分鐘,所以如果我承諾變爲混帳回購協議,它得到拉去住網站。
我想要做的是,每次運行這個腳本時,檢查一個特定的文件是否改變,如果文件改變了,運行一個curl/wget命令。
的文件,我需要跟蹤變化的style.css和的script.js
我在做什麼,如果這些文件被更改,在我的網站模板腳本的更新版本號,所以緩存被清除並且最新改變的css和js文件被加載。
<link href="/css/style.css?REVISION_NUMBER_HERE" rel="stylesheet" type="text/css">
我可以通過curl請求輕鬆增加JS/CSS修訂號,因爲它存儲在mysql數據庫中。
下面是一個簡單的git拉的結果,所以我們可以grep爲style.css中/在結果
* branch master -> FETCH_HEAD
Updating cbd0d46..36aeed6
Fast-forward
admin/cf.php | 16 ++++++++++++++++
css/style.css | 47 +++++++++++++++++++++++++++--------------------
include/common.php | 1 +
templates/header.tpl | 4 ++--
templates/index.tpl | 13 ++++++-------
5 files changed, 52 insertions(+), 29 deletions(-)
編輯
感謝@torek的答覆的script.js。
我需要BASH腳本的更多幫助,現在這裏是我的測試git命令。
[[email protected] public_html]# git diff --name-only 8613bd3ed718b27ca680bdf33e0a4b32b0f58b8c HEAD | egrep '.css|.js|.tpl'
css/style.css
templates/header.tpl
templates/index.tpl
templates/user/delete.tpl
[[email protected] public_html]#
我把硬編碼的git rev編號進行測試。我的bash腳本
[[email protected] public_html]# sh 1.sh
File changed css/style.css
File changed templates/header.tpl
File changed templates/index.tpl
File changed templates/user/delete.tpl
[[email protected] public_html]# cat 1.sh
#!/bin/bash
CSS_JS_CHANGED=0
git diff --name-only 8613bd3ed718b27ca680bdf33e0a4b32b0f58b8c HEAD | egrep '.css|.js|.tpl' |
while read name; do
CSS_JS_CHANGED=1
echo "File changed $name"
done
if [ "$CSS_JS_CHANGED" = "1" ]; then
echo expression evaluated as true
fi
[[email protected] public_html]#
如果我在裏面運行我的腳本,它會在多個文件改變時執行多次。每次更改只需運行一次腳本。
,所以我需要設置一個變量CSS_JS_CHANGED,其值設置爲0,然後如果檢測到文件更改,將其值設置爲1,然後運行我的腳本,如果CSS_JS_CHANGED的值爲1
但對於某些原因,我不能在while循環中將CSS_JS_CHANGED的值設置爲1。任何與變量範圍有關的事情?
**編輯2 **
我覺得爲什麼while循環here
作爲一個bash菜鳥我無法從內部設置變量,有人可以讓我的劇本工作,請:)
編輯3
得到它與CSS_JS_CHANGED變量工作。
[[email protected] public_html]# cat update
#!/bin/bash
# */5 * * * * /home/USERNAME/public_html/update >/dev/null 2>&1
cd /home/USERNAME/public_html
OLD_HEAD=$(git rev-parse HEAD)
git pull origin master
NEW_HEAD=$(git rev-parse HEAD)
[ $OLD_HEAD = $NEW_HEAD ] && exit 0
git diff --name-only $OLD_HEAD $NEW_HEAD | egrep '.css|.js' |
while read name; do
touch /tmp/css_js_update
done
if [ -f "/tmp/css_js_update" ]
then
/usr/bin/curl 'http://mywebsite.com/admin/cf.php?js_version_update=mywebsite'
rm -f /tmp/css_js_update
fi
[[email protected] public_html]#
現在正在等待.css /。js文件提交:)
再次感謝@torek
謝謝你的回覆。我的git knowldge是有限的,用很少的命令來做。 Git拉活服務器工作正常,唯一的問題是我必須等到cronjob運行或我需要登錄到服務器,並做手動git拉一些重要的更新,我不能等待的情況下。我會通過你的解決方案。感謝SHA-1的想法,即使我無法使用我有限的bash知識工作,我可以用一些小小的php腳本和sha1_file()來完成一些事情。 – HostOnNet