NMT-200 ЧаВо

Мелкий недочет в cron.hourly

Статья WildFlexy от 14.02.2011
Редакция от 18.05.2011

Сегодня, ковыряясь со скриптом для бэкапа служебных данных от Transmission, обнаружил мелкий, но неприятный «гвоздь» (прошивка у C-200 — от декабря 2010).
Касается это вставленной в cron.hourly строки:

/bin/ntpclient -h $ntp_server -s -i 1 >> /var/ntp.log

К сожалению, «ТАМ РЫБЫ НЕТ!». То есть, в папке /bin нет файла ntpclient. Он живет по пути /opt/syb/app/bin/. Его можно вызывать и без явного указания пути (так как путь /opt/syb/app/bin/ прописан в переменной PATH).

Файлы в папке /etc/cron менять бесполезно — при перезагрузке файлы восстанавливаются с прежним «косяком». Пришлось поправить это недоразумение скриптом из комплекта LTU /share/Apps/LTU/user.scripts/on_start_nmt.sh

#!/bin/sh
echo "#Update the NTP clock" > /etc/cron/cron.hourly
echo "ntp_server=\`pflash get time_server\`" >> /etc/cron/cron.hourly
echo "echo \"Updated from \"\$ntp_server >> /var/ntp.log" >> /etc/cron/cron.hourly
echo "date >> /var/ntp.log" >> /etc/cron/cron.hourly
echo "ntpclient -h "\$ntp_server" -s -i 1 >> /var/ntp.log" >> /etc/cron/cron.hourly
echo "date >> /var/ntp.log" >> /etc/cron/cron.hourly

Будете копировать себе — обратите внимание на то, что при копировании все «кавычечки/апострофы» правильной формы и направленности, так как клипборд во Windows обожает приукрашивать. И не забываем про Linux-формат перевода строки (LF только, а не CR+LF).

Вот теперь, после исправления, ntpclient красиво рапортует в /var/ntp.log:

Updated from time.apple.com
Tue Feb 15 02:37:32 GMT-10 2011
40586 59853.274  386834.0     31.0  260941.5  11230.5         0
Tue Feb 15 02:37:33 GMT-10 2011

Я как-то привык, что домашнее компьютерное оборудование имеет точное время. Странно было видеть, что из-за такой невнимательности программистов, к незначительному по сути скрипту, плеер синхронизируется только при включении — а именно по скрипту в /etc/init.d/S60ntp.
А если «война», а точнее при включении плеера просто нет контакта с Интернет? И знаете что мы получим? А взгляните-ка в этот файл — что вы там видите в секции start ?

start()
{
        echo "Setting default date"
        <strong>date -s 062820302010</strong>
        echo "Starting NTP update"
        /etc/ntp_update.sh &
}

Просто «картина Репина» Или «Пусть всегда будет лето!». Или «Им бы понедельники взять, да отменить!». Кто сразу не понял формат даты, который приведен в строке скрипта — декодирую:

PCH-C200[backtr]# date -d 062820302010
Mon Jun 28 20:30:00 GMT-10 2010

Кому приятно жить в прошлом году? :)

Хотелось бы надеяться, что за синхронизацию времени могут отвечать и другие приложения — например setups.cgi. По крайней мере именно в нем содержится корректный вызов. Но происходит он, видимо, только при баловстве пользователя с настройками сети.


Предвижу возражения, что для правки местоположения файла ntpclient, можно было использовать более простой вариант с символической ссылкой (симлинком).
Да, это просто! В том же sh-скрипте /share/Apps/LTU/user.scripts/on_start_nmt.sh, вместо всех «echo», ставим всего одну строку:

#!/bin/sh
ln -s /opt/syb/app/bin/ntpclient /bin/ntpclient

И все — так тоже будет работать! ;)

2010–2017 © NMT-200 ЧаВо