- 1
ping -q -c 2 -i "0.$ACTN" localhost > /dev/null
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
−131
ping -q -c 2 -i "0.$ACTN" localhost > /dev/null
Способ заснуть менее чем на секунду, не дописывая для этого отдельную программу Сишную с использованием nanosleep().
Dummy00001 21.02.2011 03:04 # +1
xaionaro 21.02.2011 09:02 # +1
1.) Perl есть всё-таки не везде, мне приходится на работе работать с gentoo-шными машинами, где владельцы не хотели бы видеть perl;
2.) Во-вторых сам "perl" будет запускаться дольше, чем "ping", т.к. он намного тяжеловеснее
3.) В самой уже perl-овой строке используются опять косвенные способы, а не прямые, select() всё-таки придуман для другого :)
Честно говоря не знаю где наименьшее зло. :(
xaionaro 21.02.2011 09:12 # 0
Но всё-равно, IMHO, он бывает реже, чем ping понимающий такие флаги.
С другой стороны, этот ping требует привилегий root-а, что несомненно огромный минус.
Dummy00001 21.02.2011 13:48 # +2
№2 - старт-ап перла (без модулей) менее 40 миллисекунд. это вам не питоны/жабы/цшарпы. (питон без модулей тоже относительно быстро грузится - но без модулей он весьма бесполезен. среднее время старт-апа без модулей менее 250 миллисекунд колд/20 миллисекунд хот (из файл кэша).)
№3 - select() единственная POSIX 4 функция (== имплементирована почти везде, даже под Виндами) поэтому да, хоть и выглядит говновато, но это самый портабельный способ доступится к нанослип из скрипта. сам нанослип появился как обязательная функция только в POSIX 6 (в POSIX 5 было опциональной функцией; заменила опциональную БСДшную usleep()).
> Честно говоря не знаю где наименьшее зло. :(
зло есть то что тебе из скрипта спать надо. слипы нужно в скриптах избегать.
xaionaro 21.02.2011 23:57 # 0
2.) Ну а у ping вдвое меньше;
3.) А чем плох "read -t" для скрипта запускаемого строго по автоматике?
> зло есть то что тебе из скрипта спать надо. слипы нужно в скриптах избегать.
sleep используется только в том случае, если два потенциально конфликтующих скрипта начали выполнять кое-какой этап своей работы одновременно. Очень маловероятная ситуация, но тем ни менее надо учесть её.
Dummy00001 22.02.2011 00:07 # 0
> sleep используется только в том случае, если два потенциально конфликтующих скрипта начали выполнять кое-какой этап своей работы одновременно.
это мне говорит только об одном: то что ты делаешь не предусмотренно в шелл скриптах. пора искать замену, где есть какой либо механизм локов, например теже файл локи (например тот же перл - `perldoc flock` или С).
PS на линухе можешь еще глянуть man 1 flock - даже для скриптов HPA чего-то сделал.
xaionaro 22.02.2011 00:19 # 0
2.) Даже в рамках этого скрипта по большей части идёт запуск каких-то внешних команд, лично по мне на perl это будет выглядеть немного уродливо. Я привык перл использовать не как язык сценария, а как язык для обработки текстов, а тут именно требуется составить сценарии.
Резюмируя, я как-то не хотел бы лишь из-за этой проблемы менять язык. Тем более что, как показали ниже, теперь "sleep" умеет понимать нецелые числа.
А скрипт будет работать только там, где есть xen и drbd, т.ч., наверника, только под linux-ом :)
А за "flock()", спасибо, буду знать.
nil 23.02.2011 00:45 # 0
Анонимус 21.02.2011 14:18 # +1
ыы))))) ping тоже
xaionaro 21.02.2011 23:51 # 0
Анонимус 21.02.2011 23:54 # 0
если Вы на сервере по ssh, то там наверняка есть tcp/ip
а раз есть ip, значит есть и пинг
nil 23.02.2011 00:43 # 0
Sulik78 21.02.2011 03:16 # 0
xaionaro 21.02.2011 09:03 # 0
xaionaro 21.02.2011 09:41 # 0
Оказалось, работает "read -t 0.25".
Спасибо :)
gegMOPO4 21.02.2011 18:30 # +2
xaionaro 22.02.2011 00:20 # 0
gegMOPO4 22.02.2011 12:14 # 0
Если bash есть не на каждом линуксе, то GNU sleep -- на каждом. Работает даже в busybox.
Наконец, это просто прямее -- зачем использовать побочный эффект другой команды, если есть специально для этого предназначенная?
xaionaro 22.02.2011 12:38 # 0
xaionaro 22.02.2011 12:40 # 0
gegMOPO4 22.02.2011 13:33 # +1
xaionaro 21.02.2011 09:06 # 0
Да, мне не удалось вчера под конец дня придумать лучше (ненавижу работать по воскресениям) из-за чего так и написал, тем ни менее я не считаю такое явление нормальным.
WGH 21.02.2011 17:57 # 0
gegMOPO4 21.02.2011 18:29 # +2
an integer, and only accepted a single argument without a suffix.
However, GNU `sleep' accepts arbitrary floating point numbers (using a
period before any fractional digits).
Dummy00001 21.02.2011 18:48 # 0
xaionaro 21.02.2011 23:58 # 0
Tanger 26.06.2011 20:19 # 0
xaionaro 18.07.2011 00:23 # 0