Automatischer Statuswechsel problem

Wenn du schon in der Powershell Shell bist, dann wird ein
./3cx-powershell-example.ps1
funktionieren. Das Programm läuft dann genau 1x.

Auf der Linux shell selber wird es mit
/usr/bin/pwsh -File 3cx-powershell-example.ps1
einmalig gestartet. Per cron Job dann halt in dem Intervall den du möchtest, mit
* * * * * halt alle 1 min..
 
Wenn du schon in der Powershell Shell bist, dann wird ein
./3cx-powershell-example.ps1
funktionieren. Das Programm läuft dann genau 1x.
PS /root> ./3cx-powershell-example.ps1
./3cx-powershell-example.ps1: The term './3cx-powershell-example.ps1' is not recognized as a name of a cmdlet, function, script file, or executable program.
Check the spelling of the name, or if a path was included, verify that the path is correct and try again.

Ich muss doch erstmal das Script in der Datei hinterlegen oder nicht ?

Auf der Linux shell selber wird es mit
/usr/bin/pwsh -File 3cx-powershell-example.ps1
einmalig gestartet.
root@3cx:~# /usr/bin/pwsh -File 3cx-powershell-example.ps1
The argument '3cx-powershell-example.ps1' is not recognized as the name of a script file. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.

Usage: pwsh[.exe] [-Login] [[-File] <filePath> [args]]
[-Command { - | <script-block> [-args <arg-array>]
| <string> [<CommandParameters>] } ]
[-CommandWithArgs <string> [<CommandParameters>]
[-ConfigurationName <string>] [-ConfigurationFile <filePath>]
[-CustomPipeName <string>] [-EncodedCommand <Base64EncodedCommand>]
[-ExecutionPolicy <ExecutionPolicy>] [-InputFormat {Text | XML}]
[-Interactive] [-MTA] [-NoExit] [-NoLogo] [-NonInteractive] [-NoProfile]
[-NoProfileLoadTime] [-OutputFormat {Text | XML}]
[-SettingsFile <filePath>] [-SSHServerMode] [-STA]
[-Version] [-WindowStyle <style>]
[-WorkingDirectory <directoryPath>]

pwsh[.exe] -h | -Help | -? | /?

PowerShell Online Help https://aka.ms/powershell-docs

All parameters are case-insensitive.
root@3cx:~#
 
Ich muss doch erstmal das Script in der Datei hinterlegen oder nicht ?
Ja aber klar doch.
ein Powershell Skript
richtig, so in etwa
Nach dem Speichern Rechte anpassen, Powershell starten und Skript ausführen
usw., s.o.

In diesem Beispiel heißt die Beispieldatei eben 3cx-powershell-example.ps1 und umfasst 85 Zeilen Text.

Nachtrag:
Wichtig ist auch die gesamte Erklärung, bis Zeile 26, am Anfang, insbesonders das in Zeile 25:
chmod +x 3cx-powershell-example.ps1

Das Kommando ausführen, damit die Textdatei als ausführbar gehandhabt wird. Dann ist es quasi auch ein ausführbares Programm und nicht nur irgend etwas lesbares.
 
Zuletzt bearbeitet:
Ich habe die Datei jetzt per hand erstellt und das komplette Skript ab Zeile 1 rein kopiert und in den root Ordner gepackt und in den Ordner /user/bin. Den das PWSH ist ja nur eine Datei. Oder bin ich gerade komplett auf dem Holzweg?
 
Einmal auf dem System reicht völlig.
und in den Ordner /user/bin
Je nach Philosophie hat die Datei da drin nichts zu suchen, aber man kann die grundsätzlich in jedem beliebigen Ordner ablegen. Man muss dann nur bei der Ausführung sagen wo die liegt, z.B. eben in /root. Es ist nicht ungeschickt, Programme im Basisordner des Benutzers der das ausführt oder einem Unterordner davon abzulegen. Allein schon der Rechte wegen und wegen des cron jobs so man ihn denn haben will. Von der Stelle aus, von der das Beispiel gestartet wird, läuft das - egal wo man das ablegt. Da wird auch das logfile des Beispiel erzeugt. Wenn dir das nicht gefällt: anpassen. Es müssen eben auch Schreibrechte des ausführenden Benutzer für diesen Ordner vorhanden sein.
 
Jagut: Wenn es von überall läuft, dann muss ich den Pfad ja nur ändern. Dachte, es muss irgendwie in den Pfad, weil immer der PSh angegeben ist. Dann probiere ich es mal mit dem Root-Filepfad.

Edit: Es klappt nicht. Ich bin sogar schon via PS im Rootverzeichnis ("/…). Er meckert immer, er kann die Datei nicht finden. Was soll denn das? Powershell ist installiert, die Datei liegt mit 777 Rechten im Root-Ordner, und trotzdem findet er es nicht.
 
Zuletzt bearbeitet:
1729777898163.png
 
PS /> ./3cx-powershell-example.ps1
ParserError: /3cx-powershell-example.ps1:1
Line |
1 | !/usr/bin/pwsh
| ~
| Missing expression after unary operator '!'.
PS />
 
Dann hast du einen copy / paste Fehler. Evtl. typischerweise den mit UTF-8-BOM oder so.
  1. verbinde dich per putty mit der Shell der 3CX
  2. lösche die Datei: rm 3cx-powershell-example.ps1
  3. starte den Editor (nano als Beispiel): nano 3cx-powershell-example.ps1
  4. kopiere dir den gesamten Text des Code Block meines Posts hier im Forum als Text in die Zwischenablage deines Computer
  5. klick z.B. einmal mit der rechten Maustaste in das putty Fenster mit geöffnetem nano, dann wird der Text eingefügt, das scrollt im Fenster nach unten an's Ende
  6. drück die Taste F2 im Editor der shell (das Exit Kommando des Editor), dann wird dir angeboten den Text zu speichern, das bestätigst du, dann hast du eine hoffentlich ordentlich funktionierende Textdatei in UTF8 ohne BOM oder so und der Editor beendet sich
  7. gib auf der Shell noch das Kommando chmod +x 3cx-powershell-example.ps1 ein damit die Datei ausführbar wird
Dann bist du fertig für weitere Experimente.

Manöverkritik: ein klein wenig mehr Wissen um solche Dinge wäre hilfreich.
 
  • Like
Reaktionen: Ben04
Dann bist du fertig für weitere Experimente.
Jetzt macht er es ohne Probleme. Also er meckert nicht mehr.
Manöverkritik: ein klein wenig mehr Wissen um solche Dinge wäre hilfreich.
Ja ich hab bisher nicht viel mit Linux gemacht und so paar Kleinigkeiten weiß ich ja, nur wenn man es dann lange nicht mehr gemacht hat, dann ist es nur noch halb da.


Wie bekomme ich das mit dem Cronjob jetzt hin, dass er das automatisch macht ?
Mit Cronjob hab ich noch nie was am hut gehabt.
Wenn ich * * * * * / -File 3cx-powershell-example.ps1 >/dev/null 2>&1 eingebe, meckert er auch wieder.
Der Pfad ist ja jetzt Root Selber statt /user/bin/pwsh.
 
Wenn ich * * * * * / -File 3cx-powershell-example.ps1 >/dev/null 2>&1 eingebe, meckert er auch wieder.
rischtisch, das war zu erwarten

Siehe Skript Zeile 22: via cron job entry
Den Eintrag kann man sich manuell erzeugen: crontab -e aufrufen, einen Eintrag wie im Beispiel dahinter erzeugen, speichern und gut ist.

Oder man nimmt das Beispiel aus Zeile 23 hinter add cron job entry, das macht das automatisch:
Bash:
(crontab -l ; echo "* * * * * /usr/bin/pwsh -File 3cx-powershell-example.ps1 >/dev/null 2>&1" ) | crontab -
Einfach das als eine Zeile ausführen, kannste wieder mit crontab -e kontrollieren, das steht dann 1x drin (wenn die Zeile 1x ausgeführt wurde, sonst halt öfters - nicht gut).

In diesem Beispielen hier überall wird eben davon ausgegangen, dass der Benutzer root das ausführt, sich das ausführbare Skript mit Namen 3cx-powershell-example.ps1 im Ordner /root befindet und der Ausgabe als Textdatei mit Namen tcxlogfile.txt auch in den Ordner /root geschrieben wird.

Das sind Beispiele die so wie sie sind funktionieren. Wenn man daran irgend etwas ändert weil man es kann, dann muss man sich auch um die Abhängigkeiten kümmen.
 
  • Like
Reaktionen: Ben04
Moin und willkommen im Tag 2 :D
Kleines Update vorraus: Es hat bis gerade eben wieder funktioniert, dass der Status auf Custom 1 geblieben ist.
Vorhin nach einer erneuten "Sicht kontrolle" ist der Status wieder auf Verfügbar.

Kommen wir zur Ausgabe Cronjob (gerade erst gemacht).
(wenn die Zeile 1x ausgeführt wurde, sonst halt öfters - nicht gut).


* * * * * /usr/bin/pwsh -File 3cx-powershell-example.ps1 >/dev/null 2>&1
* * * * * /usr/bin/pwsh -File 3cx-powershell-example.ps1 >/dev/null 2>&1


Es steht 2 x drin, was bedeutet das nun, da du meintest, mehr als 1 ist nicht gut.
2024-10-24_16-14_Donnerstag

Mehr steht in den Ausgaben nicht drin.
 
Es steht 2 x drin, was bedeutet das nun, da du meintest, mehr als 1 ist nicht gut.
Richtig. Wenn das 2x drin steht, dann wird das Skript exakt zur gleichen Zeit 2x ausgeführt. Das wäre an sich nicht schlimm, aber es gibt eine Einschränkung bei solcher Art Anmeldung an einer 3CX: der Name des Skripts muss unikat sein, siehe Zeile 28. Auch wenn das Skript selber nur kurz läuft, es darf so nur 1x zur gleichen Zeit laufen.

Also den Eintrag entfernen:
  1. crontab -e ausführen
  2. die zweite Zeile löschen
  3. Editor mit F2 beenden und die Frage nach Speichern bestätigen
Merke: sobald der cron job richtig eingestellt ist, dann füllt sich das Log minütlich mit einer neuen Zeile. Das hättest du also schon eher bemerken können.
 
  • Like
Reaktionen: Ben04
Habe es ja erst 2 Minuten vor dem Beitrag gemacht. Aber ich ändere es jetzt und schaue, was passiert.

Da hab ich aber noch eine Frage. Die Ausgabe ist ja nur Datum_Uhrzeit_Wochentag.
Wie hilft mir das in der Analyse, wann die Nebenstelle eingeloggt wird, oder eher gesagt, wodurch ?

Skript / Cronjob ist nur noch 1 Zeile und jetzt heißt es abwarten.

Edit:
So sieht s zwischenzeitlich aus

2024-10-24_16-15_Donnerstag
2024-10-24_16-20_Donnerstag Custom 1
2024-10-24_16-20_Donnerstag
2024-10-24_16-23_Donnerstag
 
Zuletzt bearbeitet:
Erkläre mir bitte kurz, wieso die Zeit so eingestellt ist. Wenn du das eben gemacht hast und die Anlage mit deutscher Zeit betrieben wird, dann müsste da mind. Freitag stehen und eine etwas andere Uhrzeit.
 
Ich habe keine Ahnung. Du meinst wahrscheinlich, dass er nicht für jede Minute ein neue Zeile hat. Ich kann es dir nicht sagen. Ich habe das Script so eingepflegt, via Nano, wie du geschrieben hast.
Den Cronjob habe ich ja ebenso angepasst, dass dort nur eine Zeile drin ist.


Edit:
Script neu gemacht, da es kurioserweise nur ein teil war, der im nano Editor zu sehen war. Nun sieht es besser aus:
Code:
2024-10-24_16-15_Donnerstag   
2024-10-24_16-20_Donnerstag   Custom 1
2024-10-24_16-20_Donnerstag   
2024-10-24_16-23_Donnerstag   
2024-10-25_09-43_Freitag   Available
2024-10-25_09-44_Freitag   Available
2024-10-25_09-45_Freitag   Available
 
2024-10-25_09-43_Freitag Available
2024-10-25_09-44_Freitag Available
2024-10-25_09-45_Freitag Available
So sollte es sein: aktuelle Uhrzeit und Status log. Einfach laufen lassen und beobachten.

Das Problem war eben absehbar, weil das Skript immer 2x gleichzeitig lief.
 
  • Like
Reaktionen: Ben04
Dann läuft es ja jetzt gut. Das wird laufen gelassen.
Wie hilft das Ganze in der Ursachenforschung dann?
Ich habe eine genaue Zeitangabe und den Status. Sehe aber nicht, wodurch es gewechselt wird. Soll ich das dann mit den Logs abgleichen oder wie finden ich/wir die Ursache?
 
Wie hilft das Ganze in der Ursachenforschung dann?
Du siehst wann es passiert. Entweder dir fällt konkret auf, dass es immer der gleiche Zeitpunkt ist und dir fällt ein was da automatisiert passiert oder du hast einen konkreten Zeitpunkt bei der Suche in den Logdateien - bis hin zum 3CX Log Viewer.
 
  • Like
Reaktionen: Ben04
Alles klar Meister.
Cronjob kann ich beenden mit:

pkill 3cx-powershell-example.ps1

oder ist der Befahl falsch ?
 

Statistik des Forums

Themen
44.754
Beiträge
233.661
Mitglieder
78.497
Neuestes Mitglied
Support IDMC