Запустите команду в определенное время - PullRequest
20 голосов
/ 20 апреля 2011

Я пытаюсь запустить команду в определенное время.Я посмотрел на команду "at", но не знаю, как заставить ее работать ...

Вот что я делаю:

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

Но как мне это сделать?это в скрипте bash?Я имею в виду, мне нужно нажать Enter и "Ctrl + D", чтобы установить задержку ... Как сделать это в скрипте?

Любые предложения приветствуются.

Заранее спасибо

Ответы [ 5 ]

28 голосов
/ 20 апреля 2011

Вы можете повторить вашу команду в at в качестве ввода:

echo "/usr/bin/php /run/this/script.php" | at 18:43
13 голосов
/ 20 апреля 2011

Вы можете попробовать это:

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

edit , если вы хотите запустить Firefox, попробуйте это:

at 1843 <<_EOF_
DISPLAY=:0.0 /usr/bin/firefox
_EOF_
7 голосов
/ 20 апреля 2011

В 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

(РЕДАКТИРОВАТЬ: упс, помогает вспомнить, какая версия at. Я думаю, что это был локальный мод.)

2 голосов
/ 20 апреля 2011

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

1 голос
/ 07 мая 2014

Команда at по умолчанию не установлена ​​для систем, на которых я работаю (Ubuntu, RHEL), и у меня нет прав для установки нового программного обеспечения, поэтому я использую сценарии, которые комбинируют bash и awk по порядкудля достижения функциональности при следующим образом:

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

...