Как заставить сценарий Unix работать каждые 15 секунд?

Очень похоже на то, что делал @Duncan выше, но мне не нравится запутывать глобальное пространство функций объекта с помощью Enum, поэтому я написал следующее:

function mkenum_1()
{
  var o = new Object();
  var c = -1;
  var f = function(e, v) { Object.defineProperty(o, e, { value:v, writable:false, enumerable:true, configurable:true })};

  for (i in arguments) {
    var e = arguments[i];
    if ((!!e) & (e.constructor == Object))
      for (j in e)
        f(j, (c=e[j]));
    else
      f(e, ++c);
    }

  return Object.freeze ? Object.freeze(o) : o;
}

var Sizes = mkenum_1('SMALL','MEDIUM',{LARGE: 100},'XLARGE');

console.log("MED := " + Sizes.MEDIUM);
console.log("LRG := " + Sizes.LARGE);

// Output is:
// MED := 1
// LRG := 100

@Stijin также имеет аккуратное решение (ссылаясь на в его блог), который включает в себя свойства этих объектов. Я тоже написал для этого код, который я включаю в следующий.

function mkenum_2(seed)
{
    var p = {};

    console.log("Seed := " + seed);

    for (k in seed) {
        var v = seed[k];

        if (v instanceof Array)
            p[(seed[k]=v[0])] = { value: v[0], name: v[1], code: v[2] };
        else
            p[v] = { value: v, name: k.toLowerCase(), code: k.substring(0,1) };
    }
    seed.properties = p;

    return Object.freeze ? Object.freeze(seed) : seed;
}

Эта версия создает дополнительный список свойств, позволяющий удобное преобразование имен и короткие коды. Мне нравится эта версия, потому что не нужно дублировать ввод данных в свойствах, поскольку код делает это за вас.

var SizeEnum2 = mkenum_2({ SMALL: 1, MEDIUM: 2, LARGE: 3});
var SizeEnum3 = mkenum_2({ SMALL: [1, "small", "S"], MEDIUM: [2, "medium", "M"], LARGE: [3, "large", "L"] });

Эти два могут быть объединены в один блок обработки, mkenum, (использовать перечисления, присваивать значения, создавать и добавлять список свойств). Однако, поскольку я уже потратил слишком много времени на это сегодня, я оставлю комбинацию в качестве упражнения для дорогого читателя.

83
задан Nick Sergeant 23 June 2009 в 18:17
поделиться

3 ответа

Я бы использовал cron для запуска сценария каждую минуту и ​​заставил бы этот сценарий запускать ваш сценарий четыре раза с 15-секундным засыпанием между запусками.

(Предполагается, что ваш сценарий запускается быстро - вы можете настроить время сна, если нет.)

Таким образом, вы получите все преимущества cron , а также 15-секундный период запуска.

Изменить: См. также комментарий @ bmb ниже.

)

Таким образом, вы получите все преимущества cron , а также 15-секундный период запуска.

Изменить: См. Также комментарий @ bmb ниже.

)

Таким образом, вы получите все преимущества cron , а также 15-секундный период запуска.

Изменить: См. Также комментарий @ bmb ниже.

75
ответ дан 24 November 2019 в 08:40
поделиться

Если вы настаиваете на запуске сценария из cron:

* * * * * /foo/bar/your_script
* * * * * sleep 15; /foo/bar/your_script
* * * * * sleep 30; /foo/bar/your_script
* * * * * sleep 45; /foo/bar/your_script

и замените имя и путь сценария на / foo / bar / your_script

285
ответ дан 24 November 2019 в 08:40
поделиться

Разве это не работает в фоновом режиме?

#!/bin/sh
while [ 1 ]; do
    echo "Hell yeah!" &
    sleep 15
done

Это примерно настолько эффективно, насколько это возможно. Важная часть выполняется только каждые 15 секунд, а в остальное время скрипт спит (таким образом не тратя циклы).

13
ответ дан 24 November 2019 в 08:40
поделиться
Другие вопросы по тегам:

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