[comment]: # ({fc0a59fb-e25ccc09})
# 3 Niestandardowe skrypty alertów

[comment]: # ({/fc0a59fb-e25ccc09})

[comment]: # ({dbb571ef-bc410af8})
### Przegląd

Jeśli nie jesteś zadowolony z istniejących typów mediów do wysyłania alertów, istnieje alternatywny sposób wykonania tego zadania.
Możesz utworzyć skrypt, który będzie obsługiwał powiadomienie w wybrany przez Ciebie sposób.

Niestandardowe skrypty alertów są wykonywane na serwerze Zabbix.
Skrypty te muszą znajdować się w katalogu określonym w parametrze [AlertScriptsPath](/manual/appendix/config/zabbix_server#alertscriptspath) w pliku konfiguracyjnym serwera.

Oto przykład niestandardowego skryptu alertu:

```bash
#!/bin/bash

to=$1
subject=$2
body=$3
host=$4
value=$5

cat <<EOF | mail -s "$subject" "$to"
$body

Host: $host
Value: $value
EOF
```

::: noteimportant
Zabbix sprawdza kod zakończenia wykonywanych poleceń i skryptów.
Każdy kod zakończenia inny niż **0** jest uznawany za błąd [wykonania polecenia](/manual/appendix/command_execution).
W takich przypadkach Zabbix spróbuje ponownie wykonać nieudaną operację.
:::

Zmienne środowiskowe nie są zachowywane ani tworzone dla skryptu, więc należy obsłużyć je jawnie.

[comment]: # ({/dbb571ef-bc410af8})

[comment]: # ({9d81bec0-47055351})
### Konfiguracja

Aby skonfigurować niestandardowe skrypty alertów jako typ mediów:

1. Przejdź do *Alerts → Media types*.
2. Kliknij *Create media type*.

Karta **Media type** zawiera ogólne atrybuty typu mediów:

![](../../../../../assets/en/manual/config/notifications/media/media_script.png){width="600"}

Wszystkie wymagane pola wejściowe są oznaczone czerwoną gwiazdką.

Następujące parametry są specyficzne dla typu mediów skryptu:

|Parameter|Description|
|--|--------|
|*Script name*|Wprowadź nazwę pliku skryptu (np. notification.sh), który znajduje się w katalogu określonym w parametrze konfiguracji serwera [AlertScriptsPath](/manual/appendix/config/zabbix_server#alertscriptspath).|
|*Script parameters*|Dodaj opcjonalne parametry skryptu, które zostaną przekazane do skryptu jako argumenty wiersza poleceń w kolejności, w jakiej zostały zdefiniowane.<br><br>Parametry skryptu obsługują makra {ALERT.SENDTO}, {ALERT.SUBJECT}, {ALERT.MESSAGE} oraz wszystkie [makra](/manual/appendix/macros/supported_by_location) obsługiwane w powiadomieniach, a także [makra użytkownika](/manual/appendix/macros/supported_by_location_user).|

Szczegóły dotyczące konfiguracji domyślnych wiadomości i opcji przetwarzania alertów znajdują się w sekcji [common media type parameters](/manual/config/notifications/media#common-parameters).

::: notewarning
Nawet jeśli skrypt alertu nie używa domyślnych wiadomości, szablony wiadomości dla typów operacji używanych przez ten typ mediów nadal muszą być zdefiniowane.
W przeciwnym razie powiadomienie nie zostanie wysłane.
:::

::: noteimportant
Jeśli skonfigurowano więcej niż jeden typ mediów skryptu, skrypty te mogą być przetwarzane równolegle przez procesy alertera.
Łączna liczba procesów alertera jest ograniczona przez parametr [`StartAlerters`](/manual/appendix/config/zabbix_server#startalerters) w pliku konfiguracji serwera.
:::

[comment]: # ({/9d81bec0-47055351})

[comment]: # ({38908152-6a270eac})
### Testowanie

Aby przetestować skonfigurowany typ mediów skryptu:

1. Znajdź odpowiedni skrypt na [liście](/manual/config/notifications/media#overview) typów mediów.

2. Kliknij *Test* w ostatniej kolumnie listy; formularz testowy zostanie otwarty w oknie podręcznym.
Formularz testowy będzie zawierał taką samą liczbę parametrów, jaka została skonfigurowana dla typu mediów skryptu.

3. W razie potrzeby edytuj wartości parametrów skryptu. Edycja wpływa wyłącznie na procedurę testową; rzeczywiste wartości nie zostaną zmienione.

4. Kliknij *Test*.

![](../../../../../assets/en/manual/config/notifications/media/script_test.png){width="600"}

::: noteclassic
Podczas testowania skonfigurowanego typu mediów skryptu {ALERT.SENDTO}, {ALERT.SUBJECT}, {ALERT.MESSAGE} oraz makra użytkownika zostaną rozwinięte do swoich wartości,
ale makra powiązane z zdarzeniami (np. {HOST.HOST}, {ITEM.LASTVALUE} itd.) nie zostaną rozwinięte, ponieważ podczas testowania nie ma powiązanego zdarzenia, z którego można pobrać szczegóły.
Należy pamiętać, że makra wewnątrz makr {ALERT.SUBJECT} i {ALERT.MESSAGE} również nie zostaną rozwinięte.
Na przykład, jeśli wartość {ALERT.SUBJECT} jest złożona z "Problem: {EVENT.NAME}", to makro {EVENT.NAME} nie zostanie rozwinięte.
:::

[comment]: # ({/38908152-6a270eac})

[comment]: # ({df584c5a-525cb972})
### Media użytkownika

Po skonfigurowaniu typu mediów przejdź do sekcji *Users → Users* i edytuj profil użytkownika, przypisując ten typ mediów do użytkownika.
Kroki konfiguracji mediów użytkownika, wspólne dla wszystkich typów mediów, są opisane na stronie [Media types](/manual/config/notifications/media#user-media).

Należy pamiętać, że podczas definiowania mediów użytkownika pole *Send to* nie może być puste.
Jeśli to pole nie jest używane w skrypcie alertu, wprowadź dowolną kombinację obsługiwanych znaków, aby ominąć wymagania walidacji.

[comment]: # ({/df584c5a-525cb972})
