Jump to content
Zatserkovnyy

Автозапуск командной строки при перезагрузке

Recommended Posts

Добрый день.

По USB 3.0 подключен внешний диск с внешним питанием, который не засыпает и все время крутит блины (даже после извлечения). Мне посоветовали команду "hdparm -S 12 /dev/sdX" для перехода в спящий режим через 60 сек, если нет обращений к диску. Как реализовать эту команду автозапуском, чтобы при перезагрузке роутера снова не вводить ее вручную? Можно обойтись без OPKG и прописать ее в startup-config? Giga III, NDMS v2.11.C.0.0-1.

Share this post


Link to post
Share on other sites

Коли доступа на работе к роутеру не имею, отвечу вопросом на вопрос. А вы проверяли наличие в прошивке утилиты hdparm? Этим я отвечаю на ваш второй вопрос...

Share this post


Link to post
Share on other sites

Нет, не проверял. И судя по вашему хитрому взгляду, прошивка не имеет этой утилиты. Для меня программирование - темный лес. Единственное, что я хочу - чтобы через n-ое кол-во времени диск переходил в спящий режим. Уверен, что сделать это возможно, но как, через что, и c помощью этого ли форума - не знаю. И мне за несколько дней вопросов и ответов не попался еще ни один человек, который мог бы внятно ответить на мой вопрос и помочь (а я уверен, что там все делается буквально на раз-два). И чувствую, что так и буду дальше по крупицам с разных форумов собирать информацию, выучу все языки программирования и из графического дизайнера переквалифицируюсь в программиста.

Share this post


Link to post
Share on other sites

Кем бы вы не были в реальной жизни, умение искать никак не зависит от вашей профессии. Тут программистов, как вы выражаетесь ровно полтора штуки. Остальные просто проходили мимо... Тыц

Share this post


Link to post
Share on other sites

Обычно так и делаю - сначала ищу готовые решения, т.к. они гораздо быстрее реализовываются на практике, чем создавать тему. Находил и читал по ссылке, которую вы дали, но там там нет ответа на вопрос. Там рекомендуют либо не отключать совсем, либо физически выключить. У меня другой вопрос.

Share this post


Link to post
Share on other sites
47 минут назад, Zatserkovnyy сказал:

Добрый день.

По USB 3.0 подключен внешний диск с внешним питанием, который не засыпает и все время крутит блины (даже после извлечения). Мне посоветовали команду "hdparm -S 12 /dev/sdX" для перехода в спящий режим через 60 сек, если нет обращений к диску. Как реализовать эту команду автозапуском, чтобы при перезагрузке роутера снова не вводить ее вручную? Можно обойтись без OPKG и прописать ее в startup-config? Giga III, NDMS v2.11.C.0.0-1.

Без opkg это сейчас невозможно сделать.

Share this post


Link to post
Share on other sites
2 минуты назад, sergeyk сказал:

Без opkg это сейчас невозможно сделать.

Отлично. Значит мне надо включить opkg в роутере (как это сделать - в базе знаний нашел, прочту), а далее как сделать автозагрузку команды? Не важно какая ФС у внешнего винта для установки opkg? Сейчас HFS+ (есть возможность в NTFS форматнуть). Или, если возможно, покажите где можно прочитать об автозагрузке команд в opkg. Найти не могу, честно, иначе бы не мучил.

Edited by Zatserkovnyy

Share this post


Link to post
Share on other sites
11 минуту назад, Zatserkovnyy сказал:

Отлично. Значит мне надо включить opkg в роутере (как это сделать - в базе знаний нашел, прочту), а далее как сделать автозагрузку команды? Не важно какая ФС у внешнего винта для установки opkg? Сейчас HFS+ (есть возможность в NTFS форматнуть). Или, если возможно, покажите где можно прочитать об автозагрузке команд в opkg. Найти не могу, честно, иначе бы не мучил.

Попытаюсь кратко. Поищите по форуму как установить entware. После установки оного вам нужно будет установить злополучную утилиту hdparm и потом в cron запилить вашу команду. Простите за вас гуглить не буду. Неудобно с телефона... 

Share this post


Link to post
Share on other sites
33 минуты назад, Mamay сказал:

Попытаюсь кратко. Поищите по форуму как установить entware. После установки оного вам нужно будет установить злополучную утилиту hdparm и потом в cron запилить вашу команду. Простите за вас гуглить не буду. Неудобно с телефона... 

Спасибо. Правильно понял, что после установки entware, устанавливаю две утилиты - hdparm и cron, потом в конфиге cron прописываю строку "hdparm -S 12 /dev/sdX" и все это дело будет автоматически стартовать после каждой перезагрузки роутера?

Или нужна строчка "@reboot hdparm -S 12 /dev/sdX"? Чтобы при каждой перезагрузке запускалась команда.

Или ее в crontab вписывать надо?

Edited by Zatserkovnyy

Share this post


Link to post
Share on other sites
38 минут назад, Zatserkovnyy сказал:

Спасибо. Правильно понял, что после установки entware, устанавливаю две утилиты - hdparm и cron, потом в конфиге cron прописываю строку "hdparm -S 12 /dev/sdX" и все это дело будет автоматически стартовать после каждой перезагрузки роутера?

Или нужна строчка "@reboot hdparm -S 12 /dev/sdX"? Чтобы при каждой перезагрузке запускалась команда.

Или ее в crontab вписывать надо?

К чему такие сложности - создаете в /opt/etc/init.d файл с именем S100hdparm.sh - chmod 755 S100hdparm.sh и перегружаете роутер.

Share this post


Link to post
Share on other sites
1 час назад, vasek00 сказал:

К чему такие сложности - создаете в /opt/etc/init.d файл с именем S100hdparm.sh - chmod 755 S100hdparm.sh и перегружаете роутер.

А куда вписывать "hdparm -S 12 /dev/sdX"? В файл S100hdparm.sh прописать "- chmod 755" или "- chmod 755 S100hdparm.sh"?

Или S100hdparm.sh - это и будет команда на сон, где 100 - секунды? Хотя сомневаюсь. Или в файле S100hdparm.sh прописываем

#!/opt/bin/sh

hdparm -S 12 /dev/sdX

chmod 755 S100hdparm.sh

Edited by Zatserkovnyy

Share this post


Link to post
Share on other sites

Сам файл S100hdparm.sh

#!/bin/sh
hdparm -S 12 /dev/sda1 

Далее выполнить

chmod 755 S100hdparm.sh

Далее проверить

ls -l

 

  • Thanks 1

Share this post


Link to post
Share on other sites
1 час назад, vasek00 сказал:

Сам файл S100hdparm.sh


#!/bin/sh
hdparm -S 12 /dev/sda1 

Далее выполнить


chmod 755 S100hdparm.sh

Далее проверить


ls -l

 

Только не sda1, а просто sda.

  • Thanks 1

Share this post


Link to post
Share on other sites

Установил OPKG (на ext4.. кстати, только ext3/ext4 пригодна для OPKG?), установил Entware, инсталлировал hdparm, закинул .sh-файл, все прошло гладко, но.. что-то не останавливается. Полная остановка происходит только тогда, когда вытаскиваю usb-кабель, либо выключаю роутер :(

Edited by Zatserkovnyy

Share this post


Link to post
Share on other sites

Когда посылаю команду напрямую через Терминал, все работает так, как надо (пробовал и -Y и -S), а вот с автозапуском .sh не работает. Что я делаю не так?

Единственное, OPKG ставил на флешку, сейчас попробую на HDD поставить.. может что-то с таймингами, флешка-то быстрее грузится (и видно в журнале что она sdb, а sda еще не подгрузились) и дает команды в то время, когда второй HDD только разгоняется.. ну это так, догадки.

Снимок экрана 2018-03-31 в 0.36.07.png

 

Снимок экрана 2018-03-31 в 0.33.21.png

Снимок экрана 2018-03-31 в 1.30.16.png

Edited by Zatserkovnyy

Share this post


Link to post
Share on other sites
14 минуты назад, Zatserkovnyy сказал:

В общем, после перезагрузки команда автоматом не запускается, приходится вручную. Как это исправить? Или какие еще варианта автозапуска есть?

Проблема, скорее всего, в том, что в момент запуска этого скрипта диск еще не обнаружен системой.

Лучше использовать hook-скрипты, которые вызываются по событиям от системы:

https://github.com/ndmsystems/packages/wiki/Opkg-Component

В частности, вам лучше обрабатывать события в /opt/etc/ndm/fs.d, который вызывается при монтировании ($1=start) разделов. Тогда команда будет отрабатывать не только при старте, но и при горячем подключении диска.

  • Thanks 1

Share this post


Link to post
Share on other sites

Вчера диск уходил в сон по команде и после одной перезагрузки. Сегодня ни в какую не хочет даже по команде через ssh. Уже час крутит блины, хотя команда была выполнена. Может диск проводить самодиагностику? Сколько оа может продолжаться? Диск Hitachi 2 Тб. Есть команда отключения самодиагностики? Если да, то ее добавить строчкой после hdparm?

 

Edited by Zatserkovnyy

Share this post


Link to post
Share on other sites
1 час назад, sergeyk сказал:

Проблема, скорее всего, в том, что в момент запуска этого скрипта диск еще не обнаружен системой.

Лучше использовать hook-скрипты, которые вызываются по событиям от системы:

https://github.com/ndmsystems/packages/wiki/Opkg-Component

В частности, вам лучше обрабатывать события в /opt/etc/ndm/fs.d, который вызывается при монтировании ($1=start) разделов. Тогда команда будет отрабатывать не только при старте, но и при горячем подключении диска.

Мне кажется, что дело в другом. Выше написал предположение.. Т.к. по команде -Y блины останавливает, а команду -S вроде как выполняет, но диск все равно чем-то занят)

Edited by Zatserkovnyy

Share this post


Link to post
Share on other sites
6 часов назад, Zatserkovnyy сказал:

 

Содержимое файла всего из двух строк

#!/bin/sh
hdparm -S 12 /dev/sda

 

Edited by vasek00
  • Thanks 1

Share this post


Link to post
Share on other sites
43 минуты назад, vasek00 сказал:

Содержимое файла всего из двух строк


#!/bin/sh
hdparm -S 12 /dev/sda

 

Ок. Закинул .sh-файл, ввожу в терминале chmod 755 S100hdparm.sh - пишет вот что:

 

Снимок экрана 2018-03-31 в 18.27.58.png

А вот так вроде бы прошло.. по-крайней мере не ругается: 

5abfb11ad80ac_2018-03-3119_02_00.png.bc580a8f71f2f12c06dd556884c70ed4.png

Edited by Zatserkovnyy

Share this post


Link to post
Share on other sites

Победил! Все-таки проблема была в офлайн-селф-тесте, который не давал диску уйти в сон. Установил smartmontools, но этот диск не хотел смарт-статус отображать, хотя другой подключенный - без проблем. Через -d sat добрался-таки, выключил офлайн сканирование, и все заработало как надо. Последний скрин с последнего сообщения рабочий, где надо было путь прописать до S100hdparm.sh. Всем спасибо, кто помогал и направлял!

Share this post


Link to post
Share on other sites

Здравствуйте у меня подключено 2 HDD  подскажите как правильно сделать запись для нескольких дисков в S100hdparm.sh
У меня для одного HDD я прописывал так:
#!/bin/sh
hdparm -S 120 /dev/sda
а как для второго или третьего прописать или для всех сразу?

И потом часто после выключения роутера имена дисков меняются был cda а стал cdb или cdd как все эти диски прописать?

Edited by Niko nik

Share this post


Link to post
Share on other sites
/ # df
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/root                19712     19712         0 100% /
...
/dev/sda1            481296380 443464668  37831712  92% /tmp/mnt/01D.......80
/dev/sda3              4671018    780763   3636508  18% /tmp/mnt/fc5.....d401
/dev/sda3              4671018    780763   3636508  18% /opt
/dev/sdb1            126636028 125564460   1071568  99% /tmp/mnt/01D......B60
/dev/sdb2            185930748 175608208  10322540  94% /tmp/mnt/01D.....9960
/ # df | grep sd | awk '{print $1}'
/dev/sda1
/dev/sda3
/dev/sda3
/dev/sdb1
/dev/sdb2
/ # 

/ # for name_sd in `df | grep sd | awk '{print $1}' | sed 's/\(^.\{8\}\).*$/\1/' | sed -n 'G; s/\n/&&/; /^\([ -
~]*\n\).*\n\1/d; s/\n//; h; P' ` ; do echo "$name_sd"; done
/dev/sda
/dev/sdb
/ # 

Как то так

Share this post


Link to post
Share on other sites
~ # df
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/root                15616     15616         0 100% /
tmpfs                   127356         0    127356   0% /dev
tmpfs                   127356       212    127144   0% /tmp
/dev/mtdblock/7           2048       384      1664  19% /storage
/dev/sda2              5465885 18014398509439612   5212117 830% /tmp/mnt/bfefcf53-6f80-d601-a0e7-ca536f80d601
/dev/sda5              7869435   1615181   5829858  22% /tmp/mnt/f43c1f32-8280-d601-603c-1f328280d601
/dev/sda2              5465885 18014398509439612   5212117 830% /opt
/dev/sdb1            976760828  46741696 930019132   5% /tmp/mnt/0000ECC10000EA34
~ # df | grep sd | awk '{print $1}'
/dev/sda2
/dev/sda5
/dev/sda2
/dev/sdb1
~ #
~ # for name_sd in `df | grep sd | awk '{print $1}' | sed 's/\(^.\{8\}\).*$/\1/'
 | sed -n 'G; s/\n/&&/; /^\([ -
> ~]*\n\).*\n\1/d; s/\n//; h; P' ` ; do echo "$name_sd"; done
sed: unmatched '/'
~ # /dev/sda
-sh: /dev/sda: Permission denied
~ # /dev/sdb
-sh: /dev/sdb: Permission denied
~ #

 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...