這篇文章主要講解了“OCF便利的函數(shù)有哪些”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“OCF便利的函數(shù)有哪些”吧!
創(chuàng)新互聯(lián)專注于企業(yè)全網(wǎng)整合營銷推廣、網(wǎng)站重做改版、容縣網(wǎng)站定制設計、自適應品牌網(wǎng)站建設、H5頁面制作、購物商城網(wǎng)站建設、集團公司官網(wǎng)建設、成都外貿(mào)網(wǎng)站建設公司、高端網(wǎng)站制作、響應式網(wǎng)頁設計等建站業(yè)務,價格優(yōu)惠性價比高,為容縣等各大城市提供網(wǎng)站開發(fā)制作服務。
7便利的函數(shù)
7.1日志: ocf_log
資源代理應該使用ocf_log函數(shù)來進行日志。調用方法如下:
支持如下幾種日志級別:
debug ---- debugging 消息。多數(shù)的日志配置缺省不使用這個級別。
info ---- 是關于資源代理行為和狀態(tài)的信息
warn ---- 警告。一些不期望的行為,但是不是不可恢復的錯誤
err ---- 錯誤。這些日志在出現(xiàn)資源代理以一定錯誤碼exit之前
crit ---- 臨界錯誤。以為有err級別。crit級別就非常少用,出發(fā)資源代理也以一定的錯誤碼退出
7.2檢查二進制:have_binary和 check_binary
資源代理可能需要測試特定可執(zhí)行文件的可用性??梢允褂胔ave_binary函數(shù):
1 2 3 | if ! have_binary frobnicate; then ocf_log warn "Missing frobnicate binary, frobnication disabled!" fi |
如果二進制文件缺失是一個致命的錯誤,就應該提前調用check_binary函數(shù):
1 | check_binary frobnicate |
使用check_binary是檢查文件存在(并且可執(zhí)行)的一個很便捷的方法,如果沒找到或不可執(zhí)行的話,以$OCF_ERR_INSTALLED退出。
注意:have_binary和check_binary會在$PATH 定義的目錄下去找指定的二進制文件。建議最好是做全路徑檢查,分布式環(huán)境里面,用戶策略的變化都會使得文件路徑發(fā)生變化。
7.3執(zhí)行命令并收集輸出:ocf_run
任何時候需要執(zhí)行一個命令并獲得其輸出都可以使用ocf_run函數(shù),像下面的例子這樣:
1 | ocf_run "frobnicate --spam=eggs" || exit $OCF_ERR_GENERIC |
通過上面的命令,資源代理會調用frobnicate --spam=eggs 并捕捉其輸出和退出碼。如果退出碼非零(代表一種錯誤),ocf_run 以 err級別將輸出記錄到日志,資源代理隨后退出。如果退出碼是0(表示成功),則輸出將以info級別記錄到日志。
如果資源代理希望忽略成功執(zhí)行的輸出,可以使用 -q 參數(shù)。在下面的例子中,ocf_run 只會將退出碼非零的執(zhí)行輸出結果導入日志。
1 | ocf_run -q "frobnicate --spam=eggs" || exit $OCF_ERR_GENERIC |
最后,如果資源代理想以不同的日志級別(非 err )記錄那些返回碼非零的執(zhí)行結果,可以通過使用 -info 或者 -warn參數(shù):
1 | ocf_run -warn "frobnicate --spam=eggs" |
7.4鎖:ocf_take_lock和 ocf_release_lock_on_exit
偶然也會出現(xiàn)這種情況,按集群配置,相同類型的不同資源不能同時并行運行。資源代理需要保證在相同機器上不會并行:
1 2 3 4 5 6 7 8 | LOCKFILE=${HA_RSCTMP}/foobar ocf_release_lock_on_exit $LOCKFILE foobar_start() { ... ocf_take_lock $LOCKFILE ... } |
ocf_take_lock 試圖獲得指定的$LOCKFILE。不可得時,它sleep 0到1秒間一個隨機的時間,再重試。ocf_release_lock_on_exit 會在資源代理退出的時候釋放鎖文件。
7.5數(shù)值檢測
對于參數(shù)檢測,這個函數(shù)可以用來檢測一個值是否是一個數(shù)。例子如下:
1 2 3 4 5 6 7 8 9 10 | LOCKFILE=${HA_RSCTMP}/foobar ocf_release_lock_on_exit $LOCKFILE foobar_validate_all() { if ! ocf_is_decimal $OCF_RESKEY_eggs; then ocf_log err "eggs is not numeric!" exit $OCF_ERR_CONFIGURED fi ... } |
7.6 boolean值檢測
當資源代理定義一個boolean類型的參數(shù),用戶會將這個參數(shù)指定為0/1, true/false, 或者 on/off。在資源代理里面,去檢測這些值是很麻煩的,所以應該用ocf_is_true函數(shù)比較方便:
1 2 3 | if ocf_is_true $OCF_RESKEY_superfrobnicate; then ocf_run "frobnicate --super" fi |
注意:ocf_is_true 不可以對空的或者不存在的變量使用。它總是返回退出碼 1,相當于 false。
7.7偽資源:ha_pseudo_resource
偽資源是那種不像實際可運行進程一樣可以真實啟動和停止的資源代理,它們僅僅執(zhí)行單個的行為,并以某種方式跟蹤這個行為執(zhí)行了還是沒有。portblock資源代理是這樣的一個例子。
偽資源的資源代理可以使用ha_pseudo_resource, 它石永紅tracking file(跟蹤文件)開保存資源狀態(tài)的標簽。如果foobar是為資源的資源代理,其start的行為應該像下面這個樣子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | foobar_start() { # exit immediately if configuration is not valid foobar_validate_all || exit $? # if resource is already running, bail out early if foobar_monitor; then ocf_log info "Resource is already running" return $OCF_SUCCESS fi # start the pseudo resource ha_pseudo_resource ${OCF_RESOURCE_INSTANCE} start # After the resource has been started, check whether it started up # correctly. If the resource starts asynchronously, the agent may # spin on the monitor function here -- if the resource does not # start up within the defined timeout, the cluster manager will # consider the start action failed while ! foobar_monitor; do ocf_log debug "Resource has not started yet, waiting" sleep 1 done # only return $OCF_SUCCESS if _everything_ succeeded as expected return $OCF_SUCCESS } |
感謝各位的閱讀,以上就是“OCF便利的函數(shù)有哪些”的內容了,經(jīng)過本文的學習后,相信大家對OCF便利的函數(shù)有哪些這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關知識點的文章,歡迎關注!