web-dev-qa-db-ja.com

特定の時間にコマンドを実行する

特定の時間にコマンドを実行しようとしています。 「at」コマンドを確認しましたが、機能させる方法がわかりません...

これが私がすることです:

at 1843 (Enter)
php /run/this/script.php (Ctrl+D)

しかし、bashスクリプトでこれを行うにはどうすればよいですか?つまり、遅延を設定するには、Enterキーと "Ctrl + D"を押す必要があります...スクリプトでこれを行う方法は?

どんな提案でも大歓迎です。

前もって感謝します、

21
Eamorr

あなたはこれを試すことができます:

at 1843 <<_EOF_
php /run/this/script.php
_EOF_

編集 Firefoxを実行する場合は、次を試してください。

at 1843 <<_EOF_
DISPLAY=:0.0 /usr/bin/firefox
_EOF_
13
Pointy

コマンドをatに入力としてエコーできます。

echo "/usr/bin/php /run/this/script.php" | at 18:43
28

bashまたはzshでは、次のように言うことができます

at 1843 <<< 'php /run/this/script.php'

失敗した場合は、ヒアドキュメントを使用する必要があります。

at 1843 <<EOF
php /run/this/script.php
EOF

また、定期的にスケジュールされたジョブについてcronを調べることもできます。 crontabエントリは次のようになります

43 18 * * * php /run/this/script.php

(編集:whoops、どのバージョンのatを思い出すのに役立ちます。ローカルmodだったと思います。)

8
geekosaur

echo "php /run/this/script.php" | at 18:43

2
drysdam

atコマンドは、私のシステム(Ubuntu、RHEL)にデフォルトでインストールされておらず、新しいソフトウェアをインストールする権限がないため、bashとawkを組み合わせたスクリプトを使用して、 at機能は次のとおりです。

#! /bin/bash

res=""
while [ ! $res ]; do

    res=$( date | awk -v hour=$1 -v min=$2 '{ 

        split($4, tmp, ":" );

        if( (tmp[1] == hour) && (tmp[2] == min) )
        {
            print "ok";   
        }
        else
        {
            print "";
        }

    }' )

done

./ atReplacement.sh $ HOUR $ MIN; [OTHER_COMMANDS]

1
funk