Легкая утилита/программа для выполнения команды после случайной задержки

Если выход оболочки достаточно, можно использовать $'\xHH' синтаксис как это:

grep -v "<["$'\x09\x00'"-"$'\x09\x7F'"]*\s"

Это достаточно для Вашего варианта использования?

7
09.06.2011, 03:59
3 ответа

Если Вы хотите управление с более прекрасными зернами, чем хорошие заклинания удара maxschlepzig, это - довольно легкая вещь просто кодировать:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <time.h>

int main(int argc, char**argv){
  useconds_t mdelay=0, delay;
  if (argc<3){
    fprintf(stderr,"%s <delay (in milli-seconds)> <command> <args>* :\n\trun commands with a random delay\n",argv[0]);
    exit(1);
  }
  mdelay=atol(argv[1]);
  /* seed random number generator with the time */
  srand(((unsigned int)time(NULL))%RAND_MAX); 
  delay = mdelay * (rand() / (1.0 + RAND_MAX));
  usleep(delay*1000);
  execvP(argv[2],getenv("PATH"),argv+2);

  return 0;
}

Скомпилируйте с чем-то как gcc randomdelay.c -o randomdelay и вызовите его как

$ randomdelay 10000 echo Hi!

Если Вы делаете, это - контекст программирования, Вы могли бы быть более обеспечены просто захват части кода, который выбирает случайную задержку Вас и звонит exec функция семейства (то, какой Вы хотите, зависит от точно, как у Вас есть указанный внутренне).

Выйдите здесь:

  • Это принимает Ваши системы rand/srand нормальны (не хороший PRNGs, обратите внимание, просто, что они делают то, что в странице справочника говорится, что они делают). Я испытывал некоторые затруднения из-за него на моем поле Mac OS X, где те функции удерживаются от использования в пользу random/srandom.
  • Исторически, многие реализация rand имели плохие числовые характеристики. Это не должно быть проблемой в этом приложении, но если это, замените его лучшим PRNG.
  • Обработка параметра командной строки в этой игрушке немного примитивна.
  • Задержка выбрана однородно из некоторого диапазона. Для некоторых приложений Вы могли бы предпочесть неограниченное распределение как экспоненциал. Переполнение стека имеет много вопросов о том, как получить неоднородные дистрибутивы от универсального PRNGs.
4
27.01.2020, 20:16
  • 1
    Это точно, о чем я говорил!Спасибо!! –  LawrenceC 11.06.2011, 16:54
  • 2
    Вы могли использовать *48 рэндов () семейство вместо рэнда (). –  jfs 13.10.2011, 21:01

В bash можно сделать это как это:

sleep $(($RANDOM%3)) && some_command

таким образом ожидая между 0 и 2 секундами прежде, чем выполнить команду. Или выберите другой интервал.

Или если $RANDOM не доступно, можно попробовать jot:

sleep `jot -r 1 0 3` && some_command

Несомненно, случайное ожидание плюс выполнение не обеспечивается единственным двоичным файлом, но близко. Ну, наличие единственного двоичного файла было бы менее ортогональным, это отчасти будет против one-tool-for-one-job-principle (и keep-it-simple-principle (KISS)).

6
27.01.2020, 20:16

Самое простое sleep команда. Запускать Вашу программу десять секунд от nowdo что-то вроде этого:

sleep 10 && your_command

Затем, если бы Вам нужно немного больше изощренности, был бы at планировщик. Вы могли запланировать задачу работать через час как так:

echo "your_command" | at +1 hour
1
27.01.2020, 20:16
  • 1
    Это не рандомизирует время, хотя (я предполагаю, что Вы могли осуществить его достаточно легко с $RANDOM). Это также походит на метод "сценария", которого он хочет избежать - он хочет двоичный файл, который делает это по некоторым причинам –  Michael Mrozek♦ 08.06.2011, 23:43
  • 2
    я был слепым к слову, "случайному" когда я красный вопрос. Сон был бы все еще работать при питании его случайное число. –  Caleb 09.06.2011, 11:27

Теги

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