Automating Tasks/fr
From OpenSimulator
Languages: |
English Français |
Contents |
Démarrage automatisé de la grille
Linux/Mac OS X
Voir
- /etc/init.d script daemon-> script de démarrage
- Mise à jour automatisée LINUX
- démarrage
- systemd
Scripts de base
- Utiliser la commande Screen
Utilisez la commande screen pour automatiser le démarrage
- Commande d'installation de Screen et création de fichier shell
Installation Linux :
Ubuntu
apt install screen
Archlinux
pacman -S screen
Mac OS X: Téléchargez soit MacPorts, http://www.macports.org/, soit Fink, http://www.finkproject.org/ pour télécharger les paquets *nix MacPorts
sudo port install screen
Fink
- Créer le fichier runsim.sh
#!/bin/sh cd opensim/bin screen -S Robust -d -m mono OpenSim.Robust.exe sleep 10 screen -S OpenSimulator -d -m mono OpenSim.exe -gridmode=true
Voir aussi --> Smart Prestart LINUX
- Scripts Bash:
- Démarrez plusieurs instances et sauvegardez les fichiers critiques avant le démarrage.
- Arrêt automatique de plusieurs instances avec un avertissement préalable de 2 minutes aux utilisateurs dans le monde.
- NB Ce modèle de commande peut être également utilisé pour lancer d'autres fonctions dans la Console d'OpenSimulator.
Démarrage et accès aux serveurs
./runsim.sh
Si vous avez des problèmes d'autorisation
chmod 755 runsim.sh
Pour voir la liste des serveurs dans screen :
screen -ls
ou
screen -list
La sortie ressemblera à ce qui suit :
There are screens on: 8419.OpenSim (Detached) 8403.Robust (Detached)
Pour accéder au serveur
screen -r 8419.OpenSim screen -r 8403.Robust
Pour quitter l'écran, en laissant le serveur en marche, et pour revenir au shell
ctrl-a d
osstart.sh
exemple: osstart.sh OpenSim
(Nom du répertoire = nom du screen)
Exemples concrets :
/opt/osstart.sh sim1
/opt/osstart.sh sim2
/opt/osstart.sh sim3
/opt/osstart.sh sim...
#!/bin/bash sleep 3 if [ -d $1 ]; then echo "$(tput setaf 4)OpenSim: $(tput setab 7)$1 Start$(tput sgr 0)" cd /opt/$1/bin screen -fa -S $1 -d -U -m mono OpenSim.exe else echo "$(tput setaf 2)The following screens were started$(tput sgr 0)" screen -ls exit 1 fi
osgridstart.sh
#!/bin/bash sleep 3 robust="/opt/robust/" if [ -d "$robust" ]; then # Take action if $robust exists. # echo "$(tput setaf 4)OpenSim: $(tput setab 3)RobustServer Start$(tput sgr 0)" cd /opt/robust/bin screen -fa -S RO -d -U -m mono Robust.exe else echo "$(tput setaf 2)The following screens were started $(tput sgr 0)RO $(tput setaf 2)and $(tput sgr 0)OS$(tput setaf 2).$(tput sgr 0)" screen -ls exit 1 fi sleep 10 money="/opt/robust/" if [ -d "$money" ]; then # Take action if $robust exists. # echo "$(tput setaf 4)OpenSim: $(tput setab 3)MoneyServer Start$(tput sgr 0)" cd /opt/robust/bin screen -fa -S MO -d -U -m mono MoneyServer.exe else echo "$(tput setaf 2)The following screens were started $(tput sgr 0)RO $(tput setaf 2)and $(tput sgr 0)OS$(tput setaf 2).$(tput sgr 0)" screen -ls exit 1 fi cd /opt # echo " Wait 40 seconds and then start regions." sleep 40 echo "$(tput setaf 2)OpenSim: $(tput setab 0)Welcome Region start$(tput sgr 0)" /opt/osstart.sh sim1 echo "$(tput setaf 2)OpenSim: $(tput setab 0)Start all other regions$(tput sgr 0)" /opt/osstart.sh sim2 /opt/osstart.sh sim3 /opt/osstart.sh sim4 /opt/osstart.sh sim5 /opt/osstart.sh sim6 /opt/osstart.sh sim7 /opt/osstart.sh sim8 /opt/osstart.sh sim9 /opt/osstart.sh sim10 echo "$(tput setaf 2)List started screens$(tput sgr 0)" screen -ls
Arrêter les serveurs
Soit accéder manuellement à chaque écran
screen -r 8419.OpenSim shutdown
ou
screen -S OpenSim -p 0 -X eval "stuff 'shutdown'^M"
Ou utiliser (uniquement en cas de crash !)
killall screen
Ou
for i in `ps afxu | grep -i "mono.*OpenSim" | grep -v grep | awk {'print $2'}`; do kill $i; done
Ou pour arrêter chaque session proprement, faites un script d'arrêt, stopgrid.sh
#!/bin/bash screen -S Robust -X quit sleep 10 screen -S OpenSim -X quit
osstop.sh
exemple: osstop.sh OpenSim
(Nom du répertoire = nom du screen)
exemples concrets :
/opt/osstop.sh sim1
/opt/osstop.sh sim2
/opt/osstop.sh sim...
#!/bin/bash sleep 10 if screen -list | grep -q $1; then echo "$(tput setaf 1)OpenSim: $(tput setab 7)Regionen OpenSimulator $1 Beenden$(tput sgr 0)" screen -S $1 -p 0 -X eval "stuff 'shutdown'^M" else echo "$(tput setaf 1)OpenSim: $(tput setab 7)Regionen OpenSimulator $1 nicht vorhanden$(tput sgr 0)" fi
osgridstop.sh
#!/bin/bash sleep 3 echo "$(tput setaf 1)OpenSim: $(tput setab 6)Stop regions$(tput sgr 0)" /opt/osstop.sh sim2 /opt/osstop.sh sim3 /opt/osstop.sh sim4 /opt/osstop.sh sim5 /opt/osstop.sh sim6 /opt/osstop.sh sim7 /opt/osstop.sh sim8 /opt/osstop.sh sim9 /opt/osstop.sh sim10 sleep 30 echo "$(tput setaf 1)OpenSim: $(tput setab 6)Stop the Welcome Region$(tput sgr 0)" /opt/osstop.sh sim1 if screen -list | grep -q "MO"; then echo "$(tput setaf 1)OpenSim: $(tput setab 3)Exit MoneyServer$(tput sgr 0)" screen -S MO -p 0 -X eval "stuff 'shutdown'^M" else echo "$(tput setaf 1)OpenSim: $(tput setab 3)MoneyServer does not exist$(tput sgr 0)" fi sleep 30 if screen -list | grep -q "RO"; then echo "$(tput setaf 1)OpenSim: $(tput setab 3)Exit RobustServer$(tput sgr 0)" screen -S RO -p 0 -X eval "stuff 'shutdown'^M" else echo "$(tput setaf 1)OpenSim: $(tput setab 3)RobustServer does not exist$(tput sgr 0)" fi sleep 30 echo " List screens" screen -ls echo "$(tput setaf 1)$(tput setab 7)Wait 60 seconds and then kill all open screens$(tput sgr 0)" sleep 60 killall screen
oslogdel.sh
supprime les fichiers journaux (malheureusement les fichiers journaux deviennent insupportablement gros).
exemple: oslogdel.sh OpenSim
Exemples concrets:
/opt/oslogdel.sh robust
/opt/oslogdel.sh sim1
/opt/oslogdel.sh sim2
/opt/oslogdel.sh sim...
#!/bin/bash sleep 3 cd /opt if [ -d $1 ]; then echo "$(tput setaf 1)OpenSim: $(tput setab 7)log $1 deleted$(tput sgr 0)" cd /opt/$1/bin # echo "/opt/$1/bin" rm *.log else echo "$(tput setaf 1)logs not found $(tput sgr 0)" exit 1 fi
Surveillance du simulateur
Surveille le processus du simulateur sous Linux
L'ajout d'une entrée à la ligne de commande pour appeler un simple script pour vérifier la table des processus peut redémarrer les régions qui se plantent . Ici User_talk:BlueWall est un script pour accomplir ceci avec un exemple d'entrée cron pour des intervalles d'une minute. Même si cela ne résoudra pas 100% des crashs, cela les résoudra la plupart des cas, et aidera à garder la grille en bonne santé. Si vous avez des questions, vous pouvez me trouver sur irc.freenode.net #opensim ou #osgrid.
--BlueWall 15:53, 19 June 2008 (PDT)
Automatiser les mises à jour
Linux (CentOS-5)
Ce script va sauvegarder vos paramètres, récupérer la dernière version d'OpenSim, construire OpenSim, et restaurer vos paramètres dans la nouvelle version. Il crée la nouvelle version dans un nouveau répertoire vous permettant de revenir à la version précédente en changeant simplement le lien 'current' pour pointer vers la version que vous voulez utiliser.
Note: Cela peut ne pas fonctionner correctement si vous mettez à jour des versions assez éloignées les unes des autres. Les mises à jour mineures devraient fonctionner correctement. Parfois, vous devez vider le SAVEDIR pour éviter que de très vieux fichiers ne perturbent une nouvelle mise à jour.
Ce script suppose que vous utilisez le numéro de version SVN comme répertoire OpenSimulator avec un lien appelé 'current' pointant vers celui-ci. Ainsi, vous pouvez, par exemple, avoir un répertoire appelé '/home/opensim/7577' et un lien 'current -> 7577'. Ce script utilise également un dossier de sauvegarde pour déplacer les paramètres de l'ancienne version vers la nouvelle.
Vous pouvez également comparer les fichiers 'OpenSim.ini' et 'OpenSim.ini.example' à la main après avoir exécuté ce script de mise à jour. Il y a souvent des changements dans ce fichier qui sont nécessaires pour la nouvelle version. La commande 'diff -bB' est très utile pour cette comparaison.
#!/bin/bash -x CWD=`pwd` MWD="/home/opensim" # Répertoire de travail principal SAVEDIR="$MWD/save" # Répertoire de sauvegarde if [ ! -d $SAVEDIR ]; then mkdir $SAVEDIR; fi if [ ! -d $SAVEDIR/Regions ]; then mkdir $SAVEDIR/Regions; fi if [ ! -d $SAVEDIR/DataSnapshot ]; then mkdir $SAVEDIR/DataSnapshot; fi if [ ! -d $SAVEDIR/config-include ]; then mkdir $SAVEDIR/config-include; fi cd $MWD # sauvegarder les paramètres actuels cp current/bin/*.xml $SAVEDIR cp current/bin/*.db $SAVEDIR cp current/bin/*.ini $SAVEDIR cp current/bin/config-include/*.ini $SAVEDIR/config-include/ cp current/bin/Regions/*xml $SAVEDIR/Regions/ cp current/bin/DataSnapshot/*xml $SAVEDIR/DataSnapshot/ # Téléchargez une nouvelle copie d'OpenSimulator REV=`svn info http://opensimulator.org/svn/opensim/trunk | fgrep Revision | awk '{print $2}'` svn -r $REV co http://opensimulator.org/svn/opensim/trunk $REV rm current ln -s $REV current cd current ./runprebuild.sh nant cd bin # restaurer les paramètres if [ ! -d ./DataSnapshot ]; then mkdir ./DataSnapshot; fi cp $SAVEDIR/*.xml . cp $SAVEDIR/*.db . cp $SAVEDIR/*.ini . cp $SAVEDIR/config-include/* config-include/ cp $SAVEDIR/Regions/* Regions/ cp $SAVEDIR/DataSnapshot/* DataSnapshot/ cd $MWD cd current # cd $CWD
Windows
Créez un fichier batch pour démarrer votre grille, par exemple startGrid.bat ;
@Echo OFF For /F "Usebackq" %%i In (`Tasklist ^| Find /C "OpenSim"`) Do If /I %%i GTR 0 Echo There are %%i OpenSimulator processes running already. I quit! & Goto END :: %PROGRAMFILES% expands to your normal application path :: On an English system this is normally C:\Program Files :: If you run a 64-bit Windows, with OpenSimulator as a 32-bit :: application, substitute with %PROGRAMFILES(X86)% Echo Starting Robust Server... start "Robust" /MIN /D "%PROGRAMFILES%\OpenSim" OpenSim.Robust.exe sleep 5 Echo Starting Region Server... start "RegionServer" /MIN /D "%PROGRAMFILES%\OpenSim" OpenSim.exe -gridmode=true :END
PS ! Vérifiez que vous avez la commande sleep installée, je ne suis pas sûr que toutes les versions de Windows l'aient. Si sleep n'est pas installé, on peut utiliser un ping localhost à la place de "sleep 3".
PING -n 4 127.0.0.1>nul
Cet article des connaissances de base décrit comment ajouter un fichier batch au démarrage de Windows (avant la connexion).
http://support.microsoft.com/kb/q243486/
Notez que vous devez démarrer toutes les applications et répondre aux questions de configuration avant de l'ajouter à tout démarrage.
Si vous démarrez le serveur avant la connexion alors il n'y aura pas de fenêtre à fermer si vous voulez arrêter le serveur, vous pouvez donc créer un "StopGrid.BAT" avec :
taskkill /FI "IMAGENAME eq OpenSim.*" sleep 3 taskkill /FI "IMAGENAME eq OpenSim.*" sleep 3 taskkill /F /FI "IMAGENAME eq OpenSim.*"
Ou un batch plus avancé qui arrête les processus du serveur dans l'ordre inverse de celui recommandé dans le manuel.
@Echo OFF For /F "Usebackq" %%i In (`Tasklist ^| Find /C "OpenSim"`) Do If /I %%i EQU 0 Echo There are no OpenSimulator processes running. Nothing to stop.. & Goto END Echo Stopping Region Server... taskkill /T /IM OpenSim.exe > NUL 2>&1 If ERRORLEVEL 128 Echo Region Server was not running! & Echo. & Goto n1 :r1 If ERRORLEVEL 1 taskkill /T /F /IM OpenSim.exe > NUL 2>&1 If ERRORLEVEL 0 Echo Region Server stopped. & Echo. & Goto n1 Goto r1 :n1 Echo Stopping Robust Server... taskkill /T /IM OpenSim.Grid.Robust.exe > NUL 2>&1 If ERRORLEVEL 128 Echo Robust Server was not running! & Echo. & Goto n2 :r2 If ERRORLEVEL 1 taskkill /T /F /IM OpenSim.Grid.Robust.exe > NUL 2>&1 If ERRORLEVEL 0 Echo Robust Server stopped. & Echo. & Goto n2
:END