0

分単位、時間単位、日単位、週単位でのみ実行される Paas cron サービスがあります。午前 8 時、午前 9 時、午前 10 時、午前 11 時、午後 4 時、午後 5 時に 15 分ごとにスクリプトを実行したいと考えています。それ、どうやったら出来るの。これが私の機能しないbashスクリプトです。

#!/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
4

2 に答える 2

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無効な8進数(分も同様)として扱われることなく、算術比較に使用できます。

if時間や分によって実行が妨げられる場合は、すべてのステートメントがスクリプトから途中で終了するだけです。微細なものは、モジュロ15の計算であるため、より単純です。

于 2013-02-04T06:59:54.993 に答える