Základní info

Oficiální návod ↗ je dobrý. Obsahuje všechno a je dobře udržovaný. Na následující stránce shrnu jak jsem server použil, a také pár drobností, které mě překvapily, nebo jsem je v návodu nenašel.

Přístup na server je rozdělen: přihlášení dovede uživatele na login1 node. Ten není výpočetní, a chybí mu například kompilátor. Na výpočetní node se dá dostat pomocí srun --pty bash -i, a kompilovat přes srun make.

Odkazy:


Přihlášení

Přihlášení dostane uživatele na login1 node, který není výpočetní.

Zadání jobu na výpočetní node

Na serveru lze naplánovat spuštění konkrétního scriptu s danými parametry.

sbatch -p cpu -t 1440 ./batch.sh par1 par2 ...

Script může spustit executable a uložit výsledek.

batch.sh

#!/usr/bin/env bash
ID="$1"
FILE="res/$ID.txt"
./barrington/src/quick.exe "$ID" > "$FILE"

Mail notifikace při dopočítání

Výpočetní nody nemají přístup k odesílání mailu. Lze to obejít tak, že zapíše záznam do souboru, který hlídá proces na login1 nodu.

Upravíme script spuštění, aby po skončení zadal spustil script na uložení záznamu o mailu.

batch.sh

#!/usr/bin/env bash
ID="$1"
FILE="res/$ID.txt"
./barrington/src/quick.exe "$ID" > "$FILE" \
&& ./notify_mail.sh "$FILE"

Script záznam uloží do souboru.

notify_mail.sh

#!/usr/bin/env bash
FILE="$1"
NOTIFICATION_FILE='list_mails_to_send.txt'
echo "$FILE" >> "$NOTIFICATION_FILE"

Pomocí tmux spustíme script, co kontroluje soubor. Konkrétně sekvencí tmux, ./watch_mail.sh, a zkratkou Ctrl+B, D, se zapne nový bash se scriptem, který poběží na pozadí. Když se v souboru oběví záznam, předá úkol mailovacímu scriptu. Vrátit k session na pozadí se vrátíme přes tmux attach.

watch_mail.sh

#!/usr/bin/env bash

NOTIFICATION_FILE='list_mails_to_send.txt'
touch "$NOTIFICATION_FILE"

while [ 1 ]; do
    while read LINE; do
        echo "detected mail $LINE, sending"
        ./mail.sh "$LINE"
    done < "$NOTIFICATION_FILE"
    echo -n "" > "$NOTIFICATION_FILE"
    sleep 60
done

Mail se pošle pomocí utility mail. Zde je nastaveno aby v předmětu mailu byla poslední řádka souboru, a celý soubor je předán jako obsah mailu.

mail.sh

#!/usr/bin/env bash
FILE="$1"
MAIL='username@fit.cvut.cz'
SUBJECT="$(tail -1 "$FILE")"
cat "$FILE" | mail -s "Results from RCI server: $SUBJECT" "$MAIL" \
&& echo "sent mail to '$MAIL' : $SUBJECT"