LINUX.ORG.RU
ФорумTalks

Что написать на shell?

 , ,


0

1

Хочется написать что-нибудь полезное, можно даже громоздкое, но на shell. Для собственного развития. Есть какие-нибудь идеи?

Подумываю о системе мониторинга сервисов с оповещениями о падениях всеми известными человечеству методами. Но нужно ли?

Да, знаю, shell малопригоден.

★★★★★

мониторинга сервисов

ejabberd, nginx и постфикс с отрубанием дудосящих, пожалуйста. xD

DeadEye ★★★★★
()
Ответ на: комментарий от IPR

Да шучу я. Конкретно - мониторить ejabberdctl status (костыльно, кто-нибудь, предложите другой вариант) всех нод, указанных в конфиге монитора, на предмет «Failed RPC connection to» и громко материться об этом в лог/куда-ты-там-придумаешь. Примерно то же и с nginx (nginx status, ЕМНИП). Как там с постфиксом/что-там-еще, не знаю - ниасилил.

DeadEye ★★★★★
()
Ответ на: комментарий от Deleted

у меня уже написана клиентская часть, которая подключается к серверу и держит коннект. необходимо написать командную оболочку и форматирование сообщений сделать.

Spoofing ★★★★★
()
Ответ на: комментарий от IPR

Ты ведь в курсе, что в bash сделано очень много полезного, без чего «что-нибудь полезное, можно даже громоздкое» написать будет проблематично?
Но согласен: там, где и без bash хорошо, он не нужен.

Darth_Revan ★★★★★
()

Не язык программирования, болезный.

kirk_johnson ★☆
()

Сервер распределённых вычислений, наверное, можно было бы сделать. И предоставить интерфейс клиентским программам.

luke ★★★★★
()
Ответ на: комментарий от Sociopsih

Да практически одно и то же.

luke ★★★★★
()
Ответ на: комментарий от Sociopsih

Поясню немного свою мысль. Я частенько пользуюсь Geant 4 — Монте-Карло моделирование прохождения частиц через вещество. Как и всякое Монте-Карло, эта штука страдает от того, что требуется генерировать большое количество событий. С другой стороны, задача очень хорошо параллелится. В принципе, мне доступно порядка 10 компьютеров. Было бы неплохо написать такой сервер, который бы маленькими порциями загружал ноды, держа эдакий баланс, дабы никто не пустовал.

luke ★★★★★
()

Систему инициализации с распараллеливанием, юнитами и бинарным журналом.

ls-h ★★★★★
()

Напиши короткую строку статус, которую потом можно будет запихнуть в PS1.

ТЗ:
Показывает (одной буквой, цветом, как угодно, но коротко)
- ftp (запуск, индикатор подключения)
- торренты (запуск)
- sshd (запуск, индикатор подключения)
- apache (запуск)
- svn (запуск)
- работа пакетного менеджера (запуск, статус устновки пакетов: сколько всего должно быть установлено и какой по счету устанавливается сейчас)

Как напишешь - скажи, покажу свой вариант :)

Kroz ★★★★★
()
Ответ на: комментарий от Sociopsih

А я пока особо не искал — всё некогда.

luke ★★★★★
()

Извращенец.

Deleted
()
Ответ на: комментарий от Kroz

но ведь это фигня вопрос, есть COMMAND_PROMPT куда загоняется функция, а в функции обновляется PS1, и в функции описывается каким угодно способом состояние любого процесса, можно хоть pgrep sshd, либо pid проверять, не суть важно. COMMAND_PROMPT ответ на твой вопрос, всё остальное дело тривиальное.

Spoofing ★★★★★
()

предлагаю написать децентрализованный p2p чат на баше, который будет работать поверх ssh. каждый желающий может поднять у себя ноду чата, после чего пригласить туда друзей, и чтобы ещё можно было слинковаться в более крупную сеть.

короче взять тот-же irc протокол и только сделать чтобы он работал поверх ssh, а каждый кто захочет сможет поднять чат-сервер у себя и слинковатся в сеть.

и всё это на простых шелл-скриптах, или баше.

по-хакерски так-то, м?

Spoofing ★★★★★
()

Автомонтировщик дисков, фотоаппаратов, и пр. девайсов. Такой, чтобы графической среды и ее компонентов не требовалось, чтобы работало в консоли. Актуальная задача. Лично я пользуюсь самописными скриптами для automount. Но вот такого решения, чтобы поставить и работало, я не припомню (был когда-то типа ivman, но тоже не то). Чтобы вставил фотик - тебе каталог или еще что, чтобы вставил какой-нибудь плеер, CD, DVD, флешки. И чтобы имена вменяемые были. Тоже, в принципе, обязку для automount можно использовать. Соорудить законченное решение и пакет.

Zubok ★★★★★
()
Ответ на: комментарий от Darth_Revan

Ты ведь в курсе, что в bash сделано очень много полезного, без чего «что-нибудь полезное, можно даже громоздкое» написать будет проблематично?

Bash - вещь, которая есть не в каждой системе, и тащить её туда нет иногда желания. А иногда возможности. Ну и я убедился, что доверять дырявым поделкам, в которых в любой момент всю обратную совместимость могут сломать, мягко говоря, не стоит.

IPR ★★★★★
() автор топика
Ответ на: комментарий от Spoofing

COMMAND_PROMPT ответ на твой вопрос, всё остальное дело тривиальное.

Да, именно так. И почти все скрипты за bash - тривиальные. Потому, что основная задача bash скриптов - автоматизировать типовые операции, а не реализовать что-то сложное. У меня есть скрипты в строк 5-7, и они реально помогают жить.

У ТС'а кризис идей что написать на bash. Вот и пример задачи. У меня это заняло 89 строк.

P. S. Не COMMAND_PROMPT, а PROMPT_COMMAND

Kroz ★★★★★
()
Ответ на: комментарий от Zubok

Соорудить законченное решение и пакет.

udisks2 давно уже в самом что ни на есть продакшене. С поправкой на что не все фотоаппараты и плееры работают как mass storage. Но там и башом несильно поможешь.

d_a ★★★★★
()
Ответ на: комментарий от Spoofing

давай jabber клиент на баше писать

да ты жесток я погляжу

upcFrost ★★★★★
()
Ответ на: комментарий от DeadEye

Конкретно - мониторить ejabberdctl status (костыльно, кто-нибудь, предложите другой вариант) всех нод, указанных в конфиге монитора, на предмет «Failed RPC connection to» и громко материться об этом в лог/куда-ты-там-придумаешь. Примерно то же и с nginx (nginx status, ЕМНИП). Как там с постфиксом/что-там-еще, не знаю - ниасилил.

а чем тебе snmp-based-системы вроде opennms или zabbix не катят? умеют хоть звонить, хоть смс слать, мониторить будут все, что им скажешь и как скажешь

upcFrost ★★★★★
()
Последнее исправление: upcFrost (всего исправлений: 1)
Ответ на: комментарий от upcFrost

шучу

В случае реальной необходимости я, конечно, велосипеды изобретать не стану.

DeadEye ★★★★★
()

Сделай реализацию Python на Shell =)

th3m3 ★★★★★
()
Ответ на: комментарий от ls-h

Систему инициализации с распараллеливанием, юнитами и бинарным журналом.

Да, примерно так оно и начиналось.

ashot ★★★★
()
Ответ на: комментарий от Spoofing

Давай на пэхэпе, гулять так гулять.

Hertz ★★★★★
()
Ответ на: комментарий от DeadEye

Это давно существует и называется udevil.

Я в криокамере на танке с немцами воевал и что творилось на гражданке не знал. Гляну, что это за зверь. :)

Zubok ★★★★★
()
Ответ на: комментарий от Kroz

Несколько не понял. Что есть «запуск», «индикатор подключения»? Покажи, как должен выглядеть prompt.

IPR ★★★★★
() автор топика
Ответ на: комментарий от uuwaan

Я писал календарик с заметками и планами на bash. Хочешь – форкни, доработай, поправь, упрости. https://github.com/uuwaan/uuwaplan

Интересно конечно, но bash...

IPR ★★★★★
() автор топика
Ответ на: комментарий от Spoofing

natcat за основу взять? )

IPR ★★★★★
() автор топика
Ответ на: комментарий от IPR

Всё уже есть, причём на Си.

Ну так autofs, которым я пользуюсь сейас, тоже на Си, но только одного его мало, его надо еще приготовить, чтобы он блох ловил (конфиги, скрипты, которые из udev выполняются). Собственно, это решение я сделал уже давно очень, когда помер ivman (да и последний мне не нравился). Оно у меня исправно кочует из адгрейда в апгрейд. Но задача такая была актуальной, так как если я кому-нибудь поставлю, скажем, Linux без XFCE и пр, а просто легковесный WM, то задачу автомонтирования ему надо как-то решать, а о готовых решениях как раз и не слыхивал. Ну, вот и посмотрим.

Скрипты тут, конечно, не для того, чтобы писать эту программу. Еще раз говорю - у меня на базе autofs. Скрипты просто вызываются из udev.

Zubok ★★★★★
()
Последнее исправление: Zubok (всего исправлений: 1)

Эмулятор первой соньки.

EXL ★★★★★
()
Ответ на: комментарий от IPR

Покажи, как должен выглядеть prompt.

Вот жаль не за домашним компом, так бы скриншот выслал.

Перед стандартным PS1 добавляется конструкция:
[ftsave]

Каждая буква соответствует сервису
f - ftp
t - torrent
s - ssh
a - web (apache)
v - svn
e - пакетный менеджер

Если соотв. сервис запущен, буква показывается. Если нет - не показывается. Если букв нет совсем, то и всей конструкции [...] нет (то есть не может быть пустой [])

Есть особенность у пакетного менеджера. Если он просто что-то делает, то выводится 'e', а если идет установка, то выводится X/Y, где X - номер пакета, который устанавливается, Y - всего сколько пакетов должно быть установлено; прогресс, так сказать.

Например, при активных ftp и svn, prompt должен быть таким:
[fv]user@host:~>

Kroz ★★★★★
()
Ответ на: комментарий от Kroz
#!/bin/sh
p_test="nc -z -w1 127.0.0.1"

p_symb() {
        if ${p_test} 22 2> /dev/null > /dev/null ; then
                printf "S"
        fi
        if ${p_test} 9091 2> /dev/null > /dev/null ; then
                printf "T"
        fi
        if ${p_test} 80 2> /dev/null > /dev/null ; then
                printf "W"
        fi
}

p_prompt="`p_symb`"

[ ! -z $p_prompt ] && printf "[${p_prompt}]"

Типа этого? Извиняюсь за говнокод, со своим ковыряюсь сейчас.

IPR ★★★★★
() автор топика
Ответ на: комментарий от Zubok

Это интересно, конечно, но не переносимо и, мне кажется, сломается после пары обновлений в Линуксе. А я в БЗД.

IPR ★★★★★
() автор топика
Ответ на: комментарий от n_play

jq вполне справляется со своими задачами. Он быстрее и на Си.

IPR ★★★★★
() автор топика
Ответ на: комментарий от DeadEye

Спасибо огромное! Джва года ждал такую игру! Даже каталоги в /media/ сам создаёт и рассоздаёт.

xenith
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.