2013-02-04 73 views
0

我有一個Paas cron服務,只能在每分鐘,每小時,每天,每週運行。我希望我的腳本每上午8點,上午9點,上午10點,上午11點,下午4點和下午5點每15分鐘運行一次。我怎麼做。這是我不工作的bash腳本。bron腳本cron任務每分鐘

#!/bin/bash 
MINUTES=`date +%M` 
HOUR=`date +%H` 
for j in "08" "09" "10" "11" "13" "16" "17";do 
    if [ "$HOUR" == "$j" ];then 
    for i in "00" "15" "30" "45";do 
     if [ "$MINUTES" == "$i" ];then 
      (
      /usr/bin/notify-send "Script is running at " 
      ) 
     fi 
    done 
    fi 
done 
+0

你能只是沒有使用'cron'?爲什麼你需要使用'bash'來安排劇本? – simont

+0

嘗試一個腳本,只是做通知發送(每分鐘),從cron服務運行時它是否工作? (字符串比較應該是'=',而不是'=='和'日期+'%H%M'|讀HOUR MINUTES'將擺脫兩個'date'調用之間的時間包裝的潛在問題。 –

+0

@AntonKovalenko是否這樣? http://pastie.org/6040989。已經測試過但沒有任何反應。 –

回答

0

我會看像(以每分鐘cron運行):

#!/usr/bin/bash 

# Exit if hour not valid. 

hh=$(date +%H) ; hhn=${hh##0} 

if [[ $hhn -lt 8 ]] ; then exit ; fi 
if [[ $hhn -gt 17 ]] ; then exit ; fi 
if [[ $hhn -eq 12 ]] ; then exit ; fi 
if [[ $hhn -eq 14 ]] ; then exit ; fi 
if [[ $hhn -eq 15 ]] ; then exit ; fi 

# Exit if not multiple of 15 minutes. 

mm=$(date +%M) ; mmn=${mm##0} ; ((mm15 = mmn % 15)) 
if [[ $mm15 -ne 0 ]] ; then exit ; fi 

# Otherwise do something. 

echo Doing something at $hh:$mm 

這有沒有做很多的循環來檢查你是否應該運行的優勢。

${hh##0}構造只是從小時中刪除任何前導零,因此0809可用於算術比較而不被視爲無效八進制(同上的分鐘)。

如果小時和/或分鐘應該阻止運行,那麼所有if語句都會從腳本中過早退出。由於它是一個模15計算,因此分鐘較簡單。

+0

http://pastie.org/6041109使用這個,但只回應最後一部分,不在15分鐘內。 –

+0

@Shafiq,你的貼子代碼是不正確的,你已經改變了最後的退出回聲,這意味着它將在這些時間內每分鐘運行。這與您的代碼基於您的意圖不符。 – paxdiablo

+0

我已刪除回聲,它仍然沒有做任何事情。 –

2

爲什麼不只是使用crontab的功能?

此行添加到crontab

*/15 8,9,10,11,16,17 * * * /path/bin/yourscript.sh 
+0

PaaS(OpenShift)上沒有crontab命令。 –