PDA

Bekijk de volledige versie : Помогите с написанием скрипта



BDMN
04-02-2010, 20:48
Что хочу сделать:
В post-mount хочу загнать скрипт, проверяющий:
1. Смонтирована ли папка opt на флешке в /opt , если нет - монтировать, если да - ничего не делать.
2. Наличие файла /opt/swap.file , если не находит - сделать его и смонтировать, если нашла но не смонтирован - смонтировать, если уже смонтирован - ничего не делать.
3. Запущены ли процессы rtorrent и smbd, если да - перезапускать, нет - просто запускать.
Пытался сделать так:


#!/bin/sh
if ! [ -d /opt/bin ]; then
mount -o bind,rw,sync,noatime /tmp/mnt/disc0_1/opt /opt
fi

if ! [ -s /opt/swap.file ]; then
{
dd if=/dev/zero of=/opt/swap.file bs=1M count=70 && mkswap /opt/swap.file && swapon /opt/swap.file
}
else
{
swap=`free -o | grep Swap`
swap1="Swap: 0 0 0"
if $swap == $swap1
then
mkswap /opt/swap.file && swapon /opt/swap.file
fi
}
fi

if `top -b -n 1 | grep rtorrent` then
/opt/etc/init.d/S99rtorrent stop && /opt/etc/init.d/S99rtorrent start
else
/opt/etc/init.d/S99rtorrent start
fi

if `top -b -n 1 | grep smbd` then
/opt/etc/init.d/S08samba restart
else
/opt/etc/init.d/S08samba start
fi

выдаёт ошибки в 18 и 23 строчках, монтирует папку, но при подключении ещё одного диска - размонтирует и флешку и диск из /tmp/mnt , swap не монтирует, процессы не запускает/перезапускает.
Фактически - мой первый скрипт, объясните, пожалуйста, что не так делаю?
Заранее спасибо за помощь!

al37919
04-02-2010, 23:13
if [ -n "`/bin/ps | grep rtorrent | grep -v grep`" ] ; then
и вообще эти проверки не нужны --- сделайте всегда restart

dmig
05-02-2010, 10:16
Я бы вообще переписал ваш скрипт так:

#!/bin/sh
# проверим, тот ли подключён хард
if [ ! -d /tmp/mnt/disc0_1/opt/ ]; then
/usr/bin/logger -t post-mount "/opt on external storage unavailable, exiting";
exit 0;
fi

# проверим, не смонтирован ли уже /opt
if [ $(/bin/grep -c /opt /proc/mounts) -lt 1 ]; then
/bin/mount -obind,noatime,nodiratime /tmp/mnt/disc0_1/opt/ /opt \
&& /usr/bin/logger -t post-mount "Mounted /opt";
fi

# если /opt смонтирован успешно, можно подключить своп
if [ -w /opt ]; then
if [ ! -s /opt/swap.file ]; then
/bin/dd if=/dev/zero of=/opt/swap.file bs=1M count=70
fi

if [ $(/bin/grep -c "/opt/swap.file" /proc/swaps) -lt 1 ]; then
/bin/mkswap /opt/swap.file && swapon /opt/swap.file && \
/usr/bin/logger -t post-mount "Enabled swap in /opt/swap.file"
fi
fi

# если присутствует скрипт rc.unslung, стартуем
if [ -x /opt/etc/init.d/rc.unslung ]; then
/opt/etc/init.d/rc.unslung start
/usr/bin/logger -t post-mount "Started rc.unslung"
fi


пара примечаний:
1) своп в файле -- плохая идея. выделите под него отдельный раздел -- доступ будет быстрее + монтироваться он будет из fstab
2) скрипт rc.unslung предназначен для запуска всего, что он найдёт в /opt/etc/init.d/

BDMN
06-02-2010, 21:20
dmig
Спасибо за настолько развёрнутую помощь, очень благодарен, много нового узнал, ещё больше полюбил роутер))
Один вопрос - куда logger пишет?

Basile
06-02-2010, 23:05
куда logger пишет?/tmp/syslog.log

Wolfgun
07-02-2010, 08:25
пара примечаний:
1) своп в файле -- плохая идея. выделите под него отдельный раздел -- доступ будет быстрее + монтироваться он будет из fstab


а что мешает swap-файл монтировать в fstab ???
Я вот хочу онказатся от отдельного раздела для opt и swap