Запуск скрипта через cron в случайное время, но определенное количество раз в день [закрыто]

function apt-get-latest(){
    set -- "${@:1:1}" "$(apt-cache-search-latest $2)" "${@:3}"
    sudo apt-get "$@"
}

function apt-cache-search-versions(){
    pkg="$1"
    prefix=${pkg%\**}
    suffix=${pkg#*\*}
    echo "$(apt-cache search --names-only "^$prefix*" | awk '{ print $1 }' | sort | grep -P ^$prefix'(\d+\.)?(\d+\.)?(\d+|)'$suffix$)"
}
function apt-cache-search-latest(){
    echo "$(apt-cache-search-versions $1 | tail -1)"
}

Использование

sudo add-apt-repository ppa:webupd8team/java -y 
sudo add-apt-repository ppa:ondrej/php -y
sudo apt-get update

apt-cache-search-versions php*-fpm 
=> php5.6-fpm php7.0-fpm php7.1-fpm php-fpm

apt-cache-search-versions oracle-java*-installer 
=> oracle-java6-installer oracle-java7-installer oracle-java8-installer oracle-java9-installer


apt-cache-search-latest php*-fpm 
=> php-fpm

apt-cache-search-latest oracle-java*-installer 
=> oracle-java9-installer


apt-get-latest install php*-fpm
apt-get-latest install oracle-java*-installer 
1
19.03.2018, 18:49
2 ответа

Для запуска сценария 2 раза в день:

0 0,12 * * * sleep $(( $$ \% 21600 )); /path/to/script.sh

Это запустит задание в полдень и полночь, затем поспите до 6 часов (половина 12-часового интервала) перед запуском сценария.

Запуск сценария 3 раза в день:

0 0,8,16 * * * sleep $(( $$ \% 14400 )); /path/to/script.sh

Это запустит задание в полночь, 8:00 и 16:00, а затем засыпает до 4 часов (половина 8-часового интервала) перед запуском сценария.

Поскольку вы пометили это с помощью Ubuntu, вероятно, у вас есть bash по умолчанию / bin / sh, который, кажется, интерпретирует $ RANDOM (несмотря на то, что RANDOM не указан в POSIX), поэтому для дополнительной непредсказуемости измените ответ Zwans на:

2 запуска в день:

0 0,12 * * * sleep $(( RANDOM \% 21600 )); /path/to/script.sh

3 запуска в день:

0 0,8,16 * * * sleep $(( RANDOM \% 14400 )); /path/to/script.sh

Я изменил && на ; , что меняет значение с «ждать, пока команда сна не завершится успешно. "чтобы" поспать какое-то время, затем независимо от того, завершился ли сон или был прекращен ". Также обратите внимание, что % необходимо экранировать , когда он является частью команды cron, в противном случае он интерпретируется как перевод строки.

4
27.01.2020, 23:34

0 * / 12 * * * sleep $ ((RANDOM% x)) && / bin / sh -c /path/to/script.sh

Ваша задержка будет между 0 и x , поэтому установите это значение самостоятельно. Это должно выполняться каждые 12 часов со случайной задержкой.

Убедитесь, что это выполняется с помощью bash .

-1
27.01.2020, 23:34

Теги

Похожие вопросы