====== Cronjob nach Reboot ausführen um Aktion auszuführen ====== In seltenen Fällen kann es notwendig sein nach einem Reboot des OmniSwitch eine Route zu entfernen und neu zu konfigurieren um L2GRE Tunneln zu helfen. Dieser Artikel beschreibt exemplarisch, wie dies per cron-job möglich ist. Dieser Artikel wurde auf folgenden System/AOS getestet: -> show system System: Description: Alcatel-Lucent Enterprise OS6465T-P12 8.9.96.R04 Service Release, April 05, 2024., Object ID: 1.3.6.1.4.1.6486.801.1.1.2.1.15.1.4, Up Time: 0 days 0 hours 42 minutes and 52 seconds, Contact: Benny, ===== Vorbereitung der Python-Dateien ===== ==== Vorbereitung: cron-handler.py ==== Diese Datei wird verwendet um aus dem "Linux-Context" in den "AOS-Context" zu wechseln und dort das eigentliche Skript auszuführen das exemplarisch eine Route entfernt und wieder hinzufügt. Der Pfad zu dieser Datei muss dieser sein: ''/flash/python/cron-handler.py'' #!/usr/bin/env python3 import subprocess # This is a helper script meant to be used with the AOS R8 ams cron-app # # Do not modify below this line # def aos_context_command(cmd): subprocess.Popen(cmd, shell=True, executable='/bin/jail') aos_context_command('python3 /flash/python/restore-route-reboot.py') ==== Vorbereitung: restore-route-reboot.py ==== Diese Datei ist dafür verantwortlich eine statische Route zu entfernen und wieder hinzuzufügen. Der Pfad zu dieser Datei muss dieser sein: ''/flash/python/restore-route-reboot.py'' In dieser Datei müssen Änderungen durchgeführt und auf die persönlichen Bedürfnisse angepasst werden! #!/usr/bin/env python3 import subprocess # This script removes a route and adds it again to address a timing issue # for L2GRE tunnels # The script is only meant to be run via the AOS R8 ams cron-app # See https://dokuwiki.alu4u.com/doku.php?id=aos-r8-omniswitch-crontab-cron-cronjob-reboot for details # # Adapt the following to your needs # -Benny # Destination destination = "1.1.1.1" # Mask e.g. /32 mask = "32" # Gateway gateway = "192.168.2.1" # # Do not modify below this line # subprocess.run(['no', 'ip', 'static-route', f'{destination}/{mask}', 'gateway', f'{gateway}'], capture_output=False) subprocess.run(['ip', 'static-route', f'{destination}/{mask}', 'gateway', f'{gateway}'], capture_output=False) ===== Konfiguration des Cronjob ===== Es ist wichtig das korrekte "working" (running)-Verzeichnis zu wählen, in diesem Fall "working"! Diese Anleitung geht außerdem davon aus, dass dies die einzige Aufgabe für die cron-app ist - wenn nicht muss die @reboot-Zeile ganz ans Ende der Datei. Ich habe Schwierigkeiten mit dieser Vorgehensweise festgestellt wenn die cron-app bereits mit einem "argument" z.B. ''appmgr start ams cron-app argument "1 /bin/ping -c 3 192.168.2.1"'' verwendet wurde. In diesem Fall würde ich davon abraten, es sollte immer nur ''appmgr start ams cron-app'' zum Starten verwendet werden und die Änderungen in der cron.cfg in "crontab"-Syntax händisch durchgeführt werden. ==== Vorbereitung: cron.cfg ==== Dieser Eintrag sorgt dafür dass nach einem Neustart des OmniSwitch 30 Sekunden gewartet wird (sleep 30), danach aus dem Linux-Kontext die Python-Datei "cron-handler.py" aufgerufen wird, die in den AOS-CLI-Kontext wechselt und die exemplarische Route entfernt/hinzufügt, gefolgt mit einem Eintrag der Ausgabe von "date" in der Datei /flash/finished-boot.txt. Der Pfad zu dieser Datei muss dieser sein: ''/flash/working/pkg/ams/cron.cfg'' @reboot sleep 30 && python3 /flash/python/cron-handler.py && date >> /flash/finished-boot.txt ===== Cronjob starten/speichern ===== -> appmgr start ams cron-app -> show appmgr Legend: (+) indicates application is not saved across reboot Application Status Package Name User Status Time Stamp ---------------+---------+-------------------+---------------------+--------------------- + cron-app started ams admin Fri Jul 19 12:51:34 2024 config-agent started ovng-agent admin Sun Feb 18 11:15:53 2024 monitoring-agent started ovng-agent admin Sun Feb 18 11:15:55 2024 -> write memory flash-synchro