Posts

Showing posts with the label skripte

AI u bash skriptama — automatska analiza logova

Python klijent iz prethodnog teksta je pravi alat kad obrada ima strukturu. Ali najveći deo posla na serveru već živi u bashu — cron zadaci, skripte za nadzor, jednolinijski lanci koji rade godinama. Za njih model treba da bude još jedna karika u pipe-u, kao grep ili awk . Ovaj tekst pokazuje kako se to radi tako da ne pukne prvog dana. Problem koji rešavaš pre svega ostalog Ovo izgleda kao da radi: $ TEKST=$(tail -20 /var/log/nginx/error.log) $ curl -s http://localhost:11434/v1/chat/completions \ -d "{\"model\":\"qwen3:8b\",\"messages\":[{\"role\":\"user\",\"content\":\"$TEKST\"}]}" I puca čim log sadrži navodnik, obrnutu kosu crtu ili prelom reda — dakle odmah. JSON postane neispravan, servis vrati 400, a poruka o grešci ne govori ništa korisno. Rešenje je da JSON nikad ne sastavljaš ručno. Za to postoji jq : $ tail -20 /var/log/nginx/error.log \ | jq -Rs '{ model: "q...

Python skripta koja komunicira sa lokalnim modelom

Dosad si sa modelom pričao kroz curl . To je dobro za razumevanje i za jednokratne provere, ali čim treba obraditi listu fajlova, ponoviti neuspeo zahtev ili proslediti izlaz dalje, bash postaje tesan. Ovaj tekst gradi Python klijent — od najmanjeg primera do alatke koju stvarno možeš staviti u /usr/local/bin . Priprema Zvanična openai biblioteka radi sa svakim OpenAI-kompatibilnim servisom, pa i sa tvojim: $ python3 -m venv ~/.venv/ai $ source ~/.venv/ai/bin/activate $ pip install openai Sistemski Python nemoj dirati; na novijim distribucijama pip to ionako odbija. Podešavanja idu u okruženje, ne u kod: $ cat ~/.ai_env export AI_BASE_URL=http://localhost:11434/v1 export AI_API_KEY=k_alen_3f8a2b91c7d45e6f export AI_MODEL=qwen3:8b $ chmod 600 ~/.ai_env $ source ~/.ai_env Ovim ista skripta radi i sa lokalnom Ollamom i sa vLLM-om iza proxy-ja , bez ijedne izmene. Najmanji klijent #!/usr/bin/env python3 import os from openai import OpenAI klijent = OpenAI( base...

Bash skripte 4 — funkcije i skripta za produkciju

U trećem delu skripta je naučila da odlučuje i ponavlja. Ovaj deo je o razlici između skripte koja radi na tvom računaru i skripte kojoj možeš da veruješ na serveru u tri ujutru. Funkcije Funkcija je imenovani deo skripte koji pozivaš više puta: #!/usr/bin/env bash pozdrav() { echo "Zdravo!" } pozdrav pozdrav Funkcija mora biti definisana pre prvog poziva — bash čita fajl odozgo nadole. Argumenti Funkcije primaju argumente isto kao skripta: $1 , $2 , $@ : proveri_servis() { local servis="$1" if systemctl is-active --quiet "$servis"; then echo "$servis: radi" else echo "$servis: NE RADI" fi } proveri_servis httpd proveri_servis sshd Unutar funkcije $1 je prvi argument funkcije , ne skripte. local — obavezna navika Bez local promenljiva u funkciji je globalna i tiho gazi istoimenu iz ostatka skripte: brojac=100 uvecaj() { brojac=5 # gazi globalnu! } uvecaj e...

Bash skripte 3 — uslovi i petlje

U drugom delu skripta je počela da radi sa različitim ulazima. Sada je učimo da donosi odluke i da ponavlja posao — bez toga skripta ostaje spisak komandi. Sve počinje od izlaznog koda Bash nema pravi tip „tačno/netačno". Umesto toga gleda izlazni kod komande: nula znači uspeh , sve ostalo neuspeh. $ ls /etc > /dev/null $ echo $? 0 $ ls /nepostojeci 2> /dev/null $ echo $? 2 Zato se if u bash-u ne pita „da li je ovo tačno" nego „da li je ova komanda uspela". Kad to jednom shvatiš, sve ostalo ima smisla. if #!/usr/bin/env bash if [ -f /etc/passwd ]; then echo "Fajl postoji" fi Puni oblik: if uslov; then komande elif drugi_uslov; then komande else komande fi Blok se zatvara sa fi — if unazad. Razmaci unutar uglastih zagrada su obavezni if [ -f "$fajl" ]; then # radi if [-f "$fajl"]; then # ne radi Razlog je što je [ zapravo komanda, a ne deo sintakse. Bez razmaka bash traži koma...

Bash skripte 2 — promenljive i argumenti

U prvom delu napravili smo skriptu koja svaki put radi isto. Da bi radila sa različitim ulazima — različitim fajlom, direktorijumom ili imenom servisa — trebaju ti promenljive. Dodela vrednosti ime="Alen" broj=42 putanja="/var/log/httpd" Znak $ ispred imena vraća vrednost: #!/usr/bin/env bash ime="Alen" echo "Zdravo, $ime" Zdravo, Alen Bez razmaka oko znaka jednakosti Ovo je greška koju svi naprave bar jednom: ime = "Alen" -bash: ime: command not found Sa razmakom bash misli da je ime komanda, a = i "Alen" njeni argumenti. Piši ime="Alen" , bez razmaka ni sa jedne strane. Imena promenljivih Slova, brojevi i donja crta; ne smeju počinjati brojem. Bash razlikuje mala i velika slova — ime i IME su dve različite promenljive. Uobičajena praksa: mala slova za svoje promenljive, velika za konstante na vrhu skripte i za promenljive okruženja. LOG_DIR="/var/log/httpd" MAX_DA...

Bash skripte 1 — prva skripta

Skripta je tekstualni fajl u koji upišeš komande koje bi inače kucao u terminal. Umesto da svaki put ponavljaš isti niz koraka, pokreneš jednu komandu i sve se odradi samo. Ovo je prvi od četiri teksta o bash skriptovanju. U ovom delu pravimo skriptu koja radi; u narednima dodajemo promenljive, uslove i petlje, pa na kraju sklapamo upotrebljivu backup skriptu. Sve što ti treba je terminal i tekstualni editor . Zašto uopšte skripte Zamisli da svakog jutra proveravaš server: koliko je diska ostalo, da li Apache radi, ima li grešaka u logu. To je tri komande koje kucaš ručno. Skripta je te tri komande u jednom fajlu. Otkucaš jednu reč i dobiješ sve. A kad to jednom postoji, može i da se zakaže da radi samo, preko cron-a . Skriptovanje nije programiranje u klasičnom smislu — to je automatizacija onoga što ionako već radiš. Prva skripta Napravi fajl: $ vi zdravo.sh Upiši: #!/bin/bash echo "Zdravo, svete!" Sačuvaj i izađi. To je cela skripta. Shebang Pr...