Запустите команду в определенное время

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

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

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

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

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

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

5 ответов

Решение

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

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

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

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

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

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

В 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, Я думаю, что это был местный мод.)

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

Команда 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]

Другие вопросы по тегам