Читал я про крон , и честно говоря для меня это тёмный лес , нехватает у меня мозгов как заставить его это всё работать
Printable View
Читал я про крон , и честно говоря для меня это тёмный лес , нехватает у меня мозгов как заставить его это всё работать
например в post-mount вписать строки:
это пример использования встроенного крона ....Code:mkdir -p /var/spool/cron/crontabs
/usr/sbin/crond
echo "1 12 * * * нужная_вам_команда" | /usr/bin/crontab -
подробное описание первых 5-ти полей здесь
Огромное спасибо за помощь , но помоему я сам нашёл кое что что мне поможет.
Как токо испытаю отпишусь.
Создал два файла
/opt/etc/avtostart
/opt/etc/avtostop
с таким содержимым
avtostart
avtostopCode:#!/bin/sh
sdparm --command=start /dev/discs/discb/part1
sleep 15
/opt/etc/init.d/08samba start
Сделал их исполняемыми , при запуске этих файлов из консоли всё отрабатывает нормально (хотелось бы что то добавить в эти файлы чтобы их исполнение отображалось в системном логе ,но не хватает на это мозгов , буду благодарен за подсказку что в них надо дописать)Code:#!/bin/sh
/opt/etc/init.d/08samba stop
sleep 15
sdparm --command=stop /dev/discs/discb/part1
добавляю в crontab запись
Если я правильно понял эта запись должна запустить файл avtostart в 22:56 но это почемуто не происходит . Поправте меня что я делаю не правильно ???Code:56 22 * * * root sh /opt/etc/avtostart
Огромное спасибо за подсказку , всё завелосьQuote:
Во всех скриптах запускаемых из крона пути должны быть полными ...
sdparm должен быть с путем от "/"
Теперь также нужно создать скрипт который бы проверял сколько сейчас времени сравнивал его с диапазоном заданого времени 1:00-16:00 и если реальное время входит в диапазон заданого времени то он бы запускал скрипт avtostop
а если реальное время не входит в диапазон заданого времени то он бы запускал скрипт avtostartCode:/opt/etc/avtostop start
Запуск этого скрипта я бы добавил в пост-моунCode:/opt/etc/avtostart start
Это нада например для того если я перегружу роутер или например отключится електричество , то после загрузки роутера в зависимости от того какое время винт с самбой или остановится или запустится.
Спасибо !!!
a S08samba умеет стоп делать? Да и размонтировать раздел перед выключением не помешает
Code:killall smbd
killall nmbd
sleep 2
umount -r /dev/discs/discb/part1
sleep 5
sdparm --command=stop /dev/discs/discb
Да самба умеет делать стоп с этим проблем нетQuote:
a S08samba умеет стоп делать? Да и размонтировать раздел перед выключением не помешает
За розмонтирование спасибо ,во токо вопрос как его потом правильно подмонтировать если не трудно подкинте скриптик и для монтирования , а то я ещё не волшебник , просто пытаюсь научится . Спасибо !!!
В очередной раз спасибо за подсказкуQuote:
З.Ы. Добавление записи в сислог поиск по "logger"
теперь скрипты выглядят так
avtostart
avtostopCode:#!/bin/sh
/opt/bin/sdparm --command=start /dev/discs/discb/part1 | logger &
sleep 15
/opt/etc/init.d/08samba start | logger &
и всё теперь прекрастно логируется ;)Code:#!/bin/sh
/opt/etc/init.d/08samba stop | logger &
sleep 15
/opt/bin/sdparm --command=stop /dev/discs/discb/part1 | logger &
Если изначально монтировалось по fstab, то
Code:mount /dev/discs/discb/part1
Я так понемаю , что если в консоли дать команду
то HDD должен отмонтироватся. А он чёто не хотит , вот такую ошибку выдаёт :(Code:umount -r /dev/discs/discb/part1
Code:umount: can't umount /dev/discs/discb/part1: Invalid argument
так уже наверное отмонтировано ... что mount говорит?
Вот это говоритQuote:
так уже наверное отмонтировано ... что mount говорит?
Code:[root@RT-N16 root]$ mount
rootfs on / type rootfs (rw)
/dev/root on / type squashfs (ro)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devfs on /dev type tmpfs (rw,noatime)
devpts on /dev/pts type devpts (rw)
tmpfs on /tmp type tmpfs (rw,noatime)
usbfs on /proc/bus/usb type usbfs (rw)
/dev/sda2 on /opt type ext3 (rw,noatime,data=ordered)
/dev/sda3 on /tmp/mnt/disca_3 type ext3 (rw,noatime,data=ordered)
/dev/sdb1 on /tmp/mnt/discb_1 type ext3 (rw,noatime,data=ordered)
[root@RT-N16 root]$
для размонтирования можно указать /dev/sdb1 или /tmp/mnt/discb_1 , а монтироватьCode:mount /dev/sdb1 /tmp/mnt/discb_1 -o rw,noatime
для того, чтобы размонтировать файловую систему следует закрыть все процессы, которые имеют на ней открытые файлы, что довольно сложно.
Кстати, было другое решение подобной проблемы, а именно автоматическое отключение диска после N минут отсутствия обращений к нему с автоматическим включением когда он потребуется:
http://wl500g.info/showpost.php?p=47135&postcount=10
Спасибо всем за помощ , вечером после роботы буду дальше розбератся
Написал 2 файлика
/opt/etc/avtostart
/opt/etc/avtostopCode:#!/bin/sh
# Запуск HDD
/opt/bin/sdparm --command=start /dev/discs/discb/part1 | logger &
sleep 10
# Монтирование HDD
mount /dev/sdb1 /tmp/mnt/discb_1 -o rw,noatime
sleep 5
# Запуск samba
/opt/etc/init.d/08samba start | logger &
И для их запуска в нужное мне время добавил в /opt/etc/crontabCode:#!/bin/sh
# Остановка samba
/opt/etc/init.d/08samba stop | logger &
sleep 15
# Отмонтирование HDD
umount -r /tmp/mnt/discb_1
sleep 5
# Остановка шпинделя HDD
/opt/bin/sdparm --command=stop /dev/discs/discb/part1 | logger &
Всё работает ,всем огромное спасибо за помощьCode:00 17 * * * root sh /opt/etc/avtostart
30 01 * * * root sh /opt/etc/avtostop
Также решил протестировать scsi-stop . Установил его
прверел его роботу с моим диском командой
Как оказалось scsi-stop не хочет дружить с моим диском , вернул ошибкуCode:/opt/etc/scsi-stop /dev/discs/discb/disc
Очень обидно ,так как очень хотелось заюзать скрипт который при простое HDD его автоматом отключает и при обращении к нему его автоматом запускаетCode:/dev/discs/discb/disc is not a SCSI block device
Вот собственно сам скрипт
Вот тема с описаниемCode:#!/bin/sh
if /usr/bin/[ $# -ne 1 ]; then
/bin/echo 1>&2 "Usage: $0 <device>"
exit 1
fi
PERIOD=30
BOUNDARY=1200
SCSISTOP=/usr/local/sbin/scsi-stop
LOGFILE=/tmp/scsi-stop.log
searchstr="disk_io:"
devaddr="(`/bin/ls -l $1 | /usr/bin/awk '{print($5 int($6/16))}'`)"
str=`/bin/grep "$searchstr" /proc/stat | devaddr="$devaddr" /usr/bin/awk -v 'RS= |\n' -F : '{ if($1==ENVIRON["devaddr"]) print($2) }'`
cooltime=0
stopped=0
while /bin/true; do
/bin/sleep $PERIOD
newstr=`/bin/grep "$searchstr" /proc/stat | devaddr="$devaddr" /usr/bin/awk -v 'RS= |\n' -F : '{ if($1==ENVIRON["devaddr"]) print($2) }'`
if /usr/bin/[ "$newstr" = "$str" ]; then
cooltime=$(($cooltime + $PERIOD))
if /usr/bin/[ $cooltime -ge $BOUNDARY -a $stopped -eq 0 ]; then
$SCSISTOP $1
time=`/bin/date '+%b %e %H:%M:%S'`
/bin/echo "$time: Cooled down..." >> $LOGFILE
stopped=1
fi
else
if /usr/bin/[ $cooltime -ne 0 ]; then
time=`/bin/date '+%b %e %H:%M:%S'`
/bin/echo "$time: Disk first used after $cooltime seconds" >> $LOGFILE
fi
cooltime=0
str=$newstr
stopped=0
fi
done
Былобы не плохо если бы ктото из знающих людей подправил скриптик для роботы с sdparm Спасибо !!!!
каламбурчик вышел ;) ... заставляет задуматься, а нужен ли этот скази-стоп, если народ не знает как от него избавиться ;).
хм ... /opt/etc странное место для бинарника. И зачем он в опт, если естьQuote:
/opt/etc/scsi-stop /dev/discs/discb/disc
/usr/sbin/scsi-stop .Вот его и надо запускатьа /dev/disks это архаизм со старого ядра, если я чего не путаю.Code:/usr/sbin/scsi-stop /dev/sdb