Re: udev infinity loop when using custom rule file with RUN+= script and sfdisk
22.11.2013 18:25, dimas пишет: На счет крона хорошая идея, т.к. я в принципе не планировал сразу после того, как вставил диск начинать архивирование. для однораховой задачи скорее подойдет какой-нибудь at. насколько я понмю, ему можно сказать что-то типа запустить через 10 минут. посмотрел на at буду иметь его в виду. и еще: пайп ( cmd1 | cmd2 ) создает новый subshell (как это по-русски?), в котором выполняется cmd2. во избежание этого (например, в случае, когда в конце пайпа запускаем функцию, которая питается переменными из нашего скрипта) вместо cat filename | cmd стоит делать cmd filename а вместо echo bla-bla-bla | cmd как-нибудь так cmd EOF bla-bla-bla EOF а то я как-то долго не мог понять, почему функция не видит переменных, а потом вычитал в мане про эту тему, она ж запускается в чистом окружении. это уже немного оффтоп, но иногда можно на такое напороться. Конкретно с таим не сталкивался, т.к. не нужно было еще. Чем еще примечателена команда: cmdfilename ? Конструкцию вида: cmd EOF EOF я частенько использовал, только все равно до конца не понимаю, что это за конструкция. Видел скопипастил и пользуюсь )) Еще мне частенько встречались EOH-и и что то еще. где об этом почитать и как это называется ? -- -- Best regards, Vladimir Skubriev -- To UNSUBSCRIBE, email to debian-russian-requ...@lists.debian.org with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org Archive: http://lists.debian.org/52942778.3030...@skubriev.ru
Re: udev infinity loop when using custom rule file with RUN+= script and sfdisk
26 ноября 2013 г., 8:45 пользователь Vladimir Skubriev vladi...@skubriev.ru написал: 22.11.2013 18:25, dimas пишет: На счет крона хорошая идея, т.к. я в принципе не планировал сразу после того, как вставил диск начинать архивирование. для однораховой задачи скорее подойдет какой-нибудь at. насколько я понмю, ему можно сказать что-то типа запустить через 10 минут. посмотрел на at буду иметь его в виду. и еще: пайп ( cmd1 | cmd2 ) создает новый subshell (как это по-русски?), в котором выполняется cmd2. во избежание этого (например, в случае, когда в конце пайпа запускаем функцию, которая питается переменными из нашего скрипта) вместо cat filename | cmd стоит делать cmd filename а вместо echo bla-bla-bla | cmd как-нибудь так cmd EOF bla-bla-bla EOF а то я как-то долго не мог понять, почему функция не видит переменных, а потом вычитал в мане про эту тему, она ж запускается в чистом окружении. это уже немного оффтоп, но иногда можно на такое напороться. Конкретно с таим не сталкивался, т.к. не нужно было еще. Чем еще примечателена команда: cmdfilename ? Конструкцию вида: cmd EOF EOF я частенько использовал, только все равно до конца не понимаю, что это за конструкция. Видел скопипастил и пользуюсь )) Еще мне частенько встречались EOH-и и что то еще. где об этом почитать и как это называется ? http://rus-linux.net/MyLDP/BOOKS/abs-guide/flat/abs-book.html#COMMANDSUB
Re: udev infinity loop when using custom rule file with RUN+= script and sfdisk
Vladimir Skubriev - Debian-russian@lists.debian.org @ Tue, 26 Nov 2013 08:45:44 +0400: VS Конкретно с таим не сталкивался, т.к. не нужно было еще. VS Чем еще примечателена команда: VS cmdfilename ? VS Конструкцию вида: VS cmd EOF VS EOF я частенько использовал, только все равно до конца не понимаю, что это за VS конструкция. Видел скопипастил и пользуюсь )) VS Еще мне частенько встречались EOH-и и что то еще. Да хоть DOSYUDA... VS где об этом почитать и как это называется ? Суммарно это называется перенаправление ввода-вывода в шеллах (input-output redirection). Конкретно второе - here-document. Почитать можно, собственно в man bash. -- To UNSUBSCRIBE, email to debian-russian-requ...@lists.debian.org with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org Archive: http://lists.debian.org/878uwbzol9@wizzle.ran.pp.ru
Re: udev infinity loop when using custom rule file with RUN+= script and sfdisk
Vladimir Skubriev vladi...@skubriev.ru wrote: 22.11.2013 17:19, Artem Chuprina пишет: Vladimir Skubriev - Debian-russian@lists.debian.org @ Fri, 22 Nov 2013 15:43:47 +0400: На счет крона хорошая идея, т.к. я в принципе не планировал сразу после того, как вставил диск начинать архивирование. О ужас летящий на крыльях ночи. Повесить dnotify на /run/backup и создавать там файлик с точкой монтирования как-то проще, чем изголятся вокруг flock, cron at (который например у себя на серверах я всегда сношу. за последние 10 лет он так никогда и не пригодился). -- To UNSUBSCRIBE, email to debian-russian-requ...@lists.debian.org with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org Archive: http://lists.debian.org/kih6ma-spi@woofie.cef.spbstu.ru
udev infinity loop when using custom rule file with RUN+= script and sfdisk
Мне нужно при присоединении определенного диска к серверу выполнять кое какой скрипт для резервного копирования сервера: SUBSYSTEM==block, KERNEL==sd?, ATTRS{vendor}==ST500DM0, ATTRS{model}==02-1BD142 , RUN+=/usr/local/sbin/customscripts/backups/fullserverbackup.sh /dev/$name Скрипт срабатвает один раз, т.к. девайс такой только один - с эти проблем нет. Но в самом скрипте я использую следующий код: sfdisk -d $SRC_DISK_FOR_MBR_PART_TABLE /tmp/sfdisk.pt cat /tmp/sfdisk.pt | sfdisk $DST_DEV [[ $? -eq 0 ]] logger -p daemon.info fullserverbackup.sh::: sfdisk succesfull copy partitions from $SRC_DISK_FOR_MBR_PART_TABLE to $DST$ Так вот этот не хороший sfdisk вызывает зацикливание, т.е. во время работы этого скрипта вызывается еще один такой же потом еще один такой же - т.е. как бы рекурсия получается. Естественно по причине особенностей работы sfdisk. Я пробовл использовать sfdisk --no-reread, но увы почему то не помогает - в принципе. Хотя и требуется по хорошему, т.к. мне после то надо писать на этот DST_DEV данные с рабочих дисков. Пробовал в начале скрипта сделать условие вида: if [ -e /tmp/sfdisk.pt ]; then exit ; else # ДАЛЕЕ ВЕСЬ МОЙ КОД СКРИПТА АРХИВИРОВАНИЯ fi Но не помогает это условие. А почему я не могу понять. Еще хочу спросить, если этот скрипт будет выполняться раз в неделю, т.е. я буду подключать резервный диск к серверу раз в неделю, а сервер может работать не перезагружась несколько месяцев, то как мне быть с файлом /tmp/sfdisk.pt ? Когда бы его удалять ? Если я удалю сразу после cat /tmp/sfdisk.pt | sfdisk $DST_DEV то не факт, что сразу же запущенный этот же скрипт - не запуститься из-за условия в начале,т.е. if [ -e /tmp/sfdisk.pt ]; then exit ; Которое как раз проверяет а не был ли запущен этот самый скрипт. Можно конечно отказаться от sfdisk-ка, но надо же уточнить - вдруг я в корне не прав в том, что навоял на bash'e. Вообщем господа - скажу честно - запутался. Помогите сделать красиво и работоспособно. Спасибо. -- -- Best regards, Vladimir Skubriev -- To UNSUBSCRIBE, email to debian-russian-requ...@lists.debian.org with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org Archive: http://lists.debian.org/528f4373.10...@skubriev.ru
Re: udev infinity loop when using custom rule file with RUN+= script and sfdisk
On Fri, Nov 22, 2013 at 03:43:47PM +0400, Vladimir Skubriev wrote: Мне нужно при присоединении определенного диска к серверу выполнять кое какой скрипт для резервного копирования сервера: SUBSYSTEM==block, KERNEL==sd?, ATTRS{vendor}==ST500DM0, ATTRS{model}==02-1BD142 , RUN+=/usr/local/sbin/customscripts/backups/fullserverbackup.sh /dev/$name Скрипт срабатвает один раз, т.к. девайс такой только один - с эти проблем нет. Но в самом скрипте я использую следующий код: sfdisk -d $SRC_DISK_FOR_MBR_PART_TABLE /tmp/sfdisk.pt [snip] Так вот этот не хороший sfdisk вызывает зацикливание, т.е. во время работы этого скрипта вызывается еще один такой же потом еще один такой же - т.е. как бы рекурсия получается. [snip] Пробовал в начале скрипта сделать условие вида: if [ -e /tmp/sfdisk.pt ]; then exit ; else # ДАЛЕЕ ВЕСЬ МОЙ КОД СКРИПТА АРХИВИРОВАНИЯ fi Но не помогает это условие. А почему я не могу понять. Попробуйте использовать утилиту flock(1) - или из самого правила udev, или из скрипта, как в примере в manpage flock: ( flock -n 9 || exit 0; ...Ваш скрипт... ) 9/tmp/sfdisk.lock (разумеется, магическая девятка здесь сугубо не магическая, а номер файлового дескриптора, который вероятно не используется шелом) Только в Вашем случае exit 0, а не 1, потому что будет нормально, что скрипта запустят дважды. Всего лучшего, Петр -- Peter Pentchev r...@ringlet.net r...@freebsd.org p.penc...@storpool.com PGP key:http://people.FreeBSD.org/~roam/roam.key.asc Key fingerprint 2EE7 A7A5 17FC 124C F115 C354 651E EFB0 2527 DF13 If I had finished this sentence, signature.asc Description: Digital signature
Re: udev infinity loop when using custom rule file with RUN+= script and sfdisk
Vladimir Skubriev - Debian-russian@lists.debian.org @ Fri, 22 Nov 2013 15:43:47 +0400: VS Мне нужно при присоединении определенного диска к серверу выполнять кое какой VS скрипт для резервного копирования сервера: VS SUBSYSTEM==block, KERNEL==sd?, ATTRS{vendor}==ST500DM0, VS ATTRS{model}==02-1BD142 , VS RUN+=/usr/local/sbin/customscripts/backups/fullserverbackup.sh /dev/$name Для начала. Кажется, в документации на udev написано: НИКОГДА не пишите тут скриптов, которые могут выполняться долго. Поставь флаг для следящего демона (например, cron), и выходи. И забудь про описанную проблему. Второе. Делать бэкап по факту вставления диска - плохая идея. Как ты будешь с него восстанавливать файлы, если стоит его воткнуть - скрипт бэкапа начнет их стирать (если они удалены) или затирать испорченными (если они испорчены)? Хорошее правило: прежде чем разработать систему резервного копирования, разработай систему восстановления. Иначе смысла в такой системе резервного копирования не будет. -- To UNSUBSCRIBE, email to debian-russian-requ...@lists.debian.org with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org Archive: http://lists.debian.org/877gc01sm3@wizzle.ran.pp.ru
Re: udev infinity loop when using custom rule file with RUN+= script and sfdisk
22.11.2013 17:19, Artem Chuprina пишет: Vladimir Skubriev - Debian-russian@lists.debian.org @ Fri, 22 Nov 2013 15:43:47 +0400: VS Мне нужно при присоединении определенного диска к серверу выполнять кое какой VS скрипт для резервного копирования сервера: VS SUBSYSTEM==block, KERNEL==sd?, ATTRS{vendor}==ST500DM0, VS ATTRS{model}==02-1BD142 , VS RUN+=/usr/local/sbin/customscripts/backups/fullserverbackup.sh /dev/$name Для начала. Кажется, в документации на udev написано: НИКОГДА не пишите тут скриптов, которые могут выполняться долго. Поставь флаг для следящего демона (например, cron), и выходи. И забудь про описанную проблему. Второе. Делать бэкап по факту вставления диска - плохая идея. Как ты будешь с него восстанавливать файлы, если стоит его воткнуть - скрипт бэкапа начнет их стирать (если они удалены) или затирать испорченными (если они испорчены)? Хорошее правило: прежде чем разработать систему резервного копирования, разработай систему восстановления. Иначе смысла в такой системе резервного копирования не будет. Этот бэкап второй способ бэкапа, т.е. важные данные бэкапяться бакулой каждый день на архивный сервер. Это для того, чтобы раз в неделю снимать копию с сервера и уносить её домой ) На счет крона хорошая идея, т.к. я в принципе не планировал сразу после того, как вставил диск начинать архивирование. Я планировал, что это будет делаться ночью, а утром я буду забирать это диск прийдя на работу. И так раз в неделю - желание руководства. -- -- Best regards, Vladimir Skubriev -- To UNSUBSCRIBE, email to debian-russian-requ...@lists.debian.org with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org Archive: http://lists.debian.org/528f602d.6050...@skubriev.ru
Re: udev infinity loop when using custom rule file with RUN+= script and sfdisk
На счет крона хорошая идея, т.к. я в принципе не планировал сразу после того, как вставил диск начинать архивирование. для однораховой задачи скорее подойдет какой-нибудь at. насколько я понмю, ему можно сказать что-то типа запустить через 10 минут. и еще: пайп ( cmd1 | cmd2 ) создает новый subshell (как это по-русски?), в котором выполняется cmd2. во избежание этого (например, в случае, когда в конце пайпа запускаем функцию, которая питается переменными из нашего скрипта) вместо cat filename | cmd стоит делать cmd filename а вместо echo bla-bla-bla | cmd как-нибудь так cmd EOF bla-bla-bla EOF а то я как-то долго не мог понять, почему функция не видит переменных, а потом вычитал в мане про эту тему, она ж запускается в чистом окружении. это уже немного оффтоп, но иногда можно на такое напороться. -- To UNSUBSCRIBE, email to debian-russian-requ...@lists.debian.org with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org Archive: http://lists.debian.org/20131122182504.2632a...@ulf.tvoe.tv
Re: udev infinity loop when using custom rule file with RUN+= script and sfdisk
Vladimir Skubriev - Debian-russian@lists.debian.org @ Fri, 22 Nov 2013 17:46:21 +0400: VS Мне нужно при присоединении определенного диска к серверу выполнять кое какой VS скрипт для резервного копирования сервера: VS SUBSYSTEM==block, KERNEL==sd?, ATTRS{vendor}==ST500DM0, VS ATTRS{model}==02-1BD142 , VS RUN+=/usr/local/sbin/customscripts/backups/fullserverbackup.sh /dev/$name Для начала. Кажется, в документации на udev написано: НИКОГДА не пишите тут скриптов, которые могут выполняться долго. Поставь флаг для следящего демона (например, cron), и выходи. И забудь про описанную проблему. Второе. Делать бэкап по факту вставления диска - плохая идея. Как ты будешь с него восстанавливать файлы, если стоит его воткнуть - скрипт бэкапа начнет их стирать (если они удалены) или затирать испорченными (если они испорчены)? Хорошее правило: прежде чем разработать систему резервного копирования, разработай систему восстановления. Иначе смысла в такой системе резервного копирования не будет. VS Этот бэкап второй способ бэкапа, т.е. важные данные бэкапяться бакулой каждый VS день на архивный сервер. VS Это для того, чтобы раз в неделю снимать копию с сервера и уносить её домой ) Это я понял. Вопрос в том, как ты будешь с нее что-то восстанавливать, если вдруг понадобится. А тут придет бэкап, и все забэкапит нах... VS На счет крона хорошая идея, т.к. я в принципе не планировал сразу после того, VS как вставил диск начинать архивирование. VS Я планировал, что это будет делаться ночью, а утром я буду забирать это диск VS прийдя на работу. Ну вот разве что так. И в инструкции по восстановлению написать большими зелеными свистящими буквами: УТРО ВЕЧЕРА МУДРЕНЕЕ -- To UNSUBSCRIBE, email to debian-russian-requ...@lists.debian.org with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org Archive: http://lists.debian.org/87zjowz8ze@wizzle.ran.pp.ru