搜尋

搜尋結果

排程執行任務 | Linux Schedule Job
科技新知
MacauYeah・2023-09-07

在Linux底下,crontab是一個最簡單建立Schedule Job的方法。大家用crontab e 就可以進入設定。 # crontab e 1 optrun.sh 其中每個星號,順序代表的是分、時、日、月、星期。上面的例子就是不論何月何日何時,只要每一分鐘就執行一次optrun.sh Singleton Job 問題是,實際情況下,你想執行程式的時間都不一定會少於1分鐘。所以你總是有機會上一個job未跑完,下一個job就開始了。為了保障自已,需要一些參考機制,去決定是否讓job開始跑。 有些情況,可能你會想用job server去做監管,但若只為單線執行的工作,起一個job server還是會增加管理上的複雜性。 最簡單的做法,就是根據不同的程式語言,使用file lock(鎖上)的機制,先上鎖,再做事。但要注意考慮有沒有出現異常情況,令你自己反鎖自己。即是你的process死了,但不懂自己解鎖,這樣以後你也不能再執行了。 在Linux Bash Shell下,就有一個很簡單的做法,就是使用flock指令。用它的最大好處,就是從OS層面下,去鎖上。只要process結束了,不論正常還是不正常結束,都會自動解鎖。 以下例子就是在執行optrun.sh前,先要取得tmprun.lockfile的鎖。如果沒法取鎖,就自動放棄執行後面的指令。 flock n tmprun.lockfile optrun.sh # crontab e 1 flock n tmprun.lockfile optrun.sh Timeout 引入singleton的概念後,其實會引發另一個問題。因為異常的情況,還有機會是不生不死,process hang。所以我們還需要設定一個最大的執行時間,讓你的process在異常的情況下,被強行清走。 例如,ping指令在linux預設是永遠不會自動停止的,可以模擬process hang的情況。如果我們想定時從外部收走ping process,就可以使用timeout指令。以下指令就是2分鐘後殺指ping process。 # in file optrun.sh timeout 2m ping localhost # to check process id, you could use # gt; ps aux grep ping # you will see two different id for ping and timeout 配合errorcode使用,你可能還會在想在timeout時送出一個email通知自已。 # in file optrun.sh timeout 2m ping localhost exitCode=$ if $exitCode eq 124 ; then echo quot;timeoutquot; # enter email alert with timeout elif $exitCode gt 0 ; then echo quot;exit with errorquot; # enter email alert with timeout else echo quot;exit normalquot; fi 配合docker使用,你可能需要考慮signal怎樣傳遞。 在筆者測試的環境中,似乎SIGTERM會被擋,也有可能是SIGTERM太強,它只把前景的docker container run收走,但其內的ping process還在docker daemon中行走。所以最後改用SIGINT,讓docker container run可以好好地把SIGINT傳入其內。 # It seems that docker captured the SIGTERM. Send SIGINT instead # in file optrun.sh timeout signal=SIGINT 10s docker container run rm pingtest c 20 exitCode=$ if $exitCode eq 124 ; then echo quot;timeoutquot; # enter email alert with timeout elif $exitCode gt 0 ; then echo quot;exit with errorquot; # enter email alert with timeout else echo quot;exit normalquot; fi Full demo, github repo cronjobWithDocker

ANA 香港出發古屋HKD2,290!東京HKD2,940!
激安優惠
OHChance 旅遊誌・2018-10-26

ANA 全日空推出東京及名古屋航線優惠,名古屋雖然話用有d 舊ge 737飛,但2300直飛兼包46KG行李真係去outlet 掃貨首選。 呢次覆蓋日期都幾長,但所有d 大假如聖誕、新年、復活節等都無平飛。 《優惠價錢(來回連稅)》*香港⇄東 京:HKD2,940*香港⇄名古屋:HKD2,290    《出發日期及最長停留》.出發日期:11月1日至5月31日(東京)      1月1日至5月31日(名古屋).最長停留:14天   《購票日期及方法》.購票日期:10月29日1659前預訂.購票方法:至全日空航空官網.預訂網址:httpswww.ana.co.jpzhhk  【輔助訊息】.ANA 票價已包46KG託運行李及餐點。  附註:上述最低價錢為航空公司公告之最優惠價格,或本站能找到的最低價格;每一航班有否優惠票價及所存票量由航空公司決定,優惠票量有限售完即止。  價錢 Sample ndash; 香港飛名古屋來回連稅HKD2,290 ===== 想搵平機票去玩,即上 OH!Chance!澳燦旅行資訊 httpsohchance.info 去日本旅行買咩 JR Pass好?即上 OH!Note!小燦的旅行筆記做功課 httpsohnote.info 唔知間航空公司好唔好坐?馬上 Subscribe OH Chance Youtube 睇睇佢:httpsyoutube.comcOHChanceTravel 睇埋 Facebook 專頁 httpsfb.comohchance 第一時間獲得最新旅遊資訊!

食記】Athletic Juice & Espresso Bar:啟動每天好神!
全球飲食
原來世界這樣大・2018-08-09

別人説一日之計在於晨,早點起床確實有很多好處,除了感覺時間可以更好使用之外..人想覺得特別的精神!而想活力充沛地迎接每天最不可缺少就是一份豐富的早餐。 不過可是家裡健康的食物實在不多,最多的是公仔麵,加上為人比較懶惰,還是比上班時間早點出發去吃個豐富的早餐罷了!於是,我就做了些資料搜集,四出找尋早餐的地方。 於是,我就做了些資料搜集,四出找尋早餐的地方。我找到距離公司不遠星街內的Athletic Juice amp; Espresso Bar主打健康果汁,決定比平時早半小時出門,吃個豐富的早餐來迎接這個忙碌的星期。 可是,去到店員就跟我説牛油果未到,所以Avolatte和其他牛油果的飲品或食品都暫時不能供應,對於我這個牛油果狂迷實在是傷透了心,取而代之是Ham amp; Cheese sandwich 和鮮榨果汁。 Ham amp; Cheese 有三層,比我想像中的多,簡簡單單的在烘過的麵包上加上火腿和芝士,再配著鮮榨果汁。在Athletic Juice有各種配搭的果汁,即點即榨。在10款果汁確實是眼花瞭亂,隨便點了個J06的Rachquet Hitter ndash; 包括有芒果、熱情果、菠蘿和檸檬。因此顏色偏黃一點,在芒果的甜味之中帶著菠蘿和熱情果的鮮味,相當新鮮。 有這半小時享受這份早餐,叉足電後上班去! Athletic Juice amp; Espresso Bar灣仔星街2E號地下

Swarm mode 上線 4 | IP 設定
科技新知
MacauYeah・2024-07-23

單機模式 IP設定 平常我們自己做測試,網絡功能通常用預設的就好。但當我們的Docker Container需要存取在區域網內的其他資源,避晚IP網段相衝是必需要的事。 大部份情況下,單機Docker使用的預設IP段會是 172.17.0.016 172.18.0.016 ... 若然現在區域網中,有一段172.18.0.024,大家不想Docker踩到其中,可以修改設定檔,加入預設的defaultaddresspools,以後它就只會從指定的區段使用。 # vim etcdockerdaemon.json quot;defaultaddresspoolsquot; quot;basequot; quot;172.17.0.016quot;, quot;sizequot; 24 , quot;basequot; quot;172.19.0.016quot;, quot;sizequot; 24 , quot;basequot; quot;172.20.0.016quot;, quot;sizequot; 24 其中base,是docker可以操作的總區域,size指的是Docker要自行分段的話,每段的大小是多少,上述的例子,就代表未來可能有以下Docker 網段。 172.17.0.024 172.17.1.024 ... 172.17.255.024 172.19.0.024 172.19.1.024 ... 172.19.255.024 172.20.0.024 172.20.1.024 ... 172.20.255.024 修改完設定後,重啟Docker就會生效。當然,重啟前,先刪除所有不在預設範圍的所有Container。 Swarm模式 IP設定 Swarm模式,與單機差不多,它需要在初始化Swarm就要定義,而且它不能與單機的網段有重疊。單機會預設使用Private IPv4 Class B,Swarm則是預設使用Private IPv4 Class A段,所以我們若就更改,就使用10.x.x.x吧。 docker swarm init defaultaddrpool 10.1.0.016 defaultaddrpoolmasklength 24 經上述例子初始化的 ingress 網段,將會是 10.1.0.024,隨後每個stack 則會是 10.1.1.024 10.1.2.024 10.1.3.024 重置Swarm 跟單機的情況類似,如果已建立Swarm後才修改網段,還是要整個刪掉重來。 每個節點都要執行以下指令。 docker swarm leave force 實測swarm leave這個指令也會把所有運行中的stack刪掉。 各節點重新建立swarm # in node 1, init new swarm with new ip docker swarm init defaultaddrpool 10.1.0.016 defaultaddrpoolmasklength 24 # in node 1, get new manager token docker swarm jointoken manager # in node 2 and node 3, join node 1 with new token docker swarm join token XXXXX YOUR_NEW_NODE1_IP2377 雙管齊下 如果大家同想要修定單機及Swarm的網段,還要留意有一個特別的網段docker_gwbridge。它雖然是Swarm的附帶產物,但它則是受單機的網段控制。也就是,如果大家有需要同時修改單機及Swarm的網段,則需要手動刪除Swarm及docker_gwbridge 在每個節點先刪掉舊有的Swarm及docker_gwbridge,並關掉docker docker swarm leave force docker network rm docker_gwbridge 在每個節點為docker_gwbridge修改設定,然後重起docker # vim etcdockerdaemon.json quot;defaultaddresspoolsquot; quot;basequot; quot;172.17.0.016quot;, quot;sizequot; 24 然後像前述一樣,重起Swarm。