LesezeichenAbonnierenRSS-Feed abonnieren
prof
Calcite | Level 5

Hallo! Hab folgendes Problem: In der Regel erstellen wir unsere SAS Programme in einer SAS Client Umgebung (lokal installiertes SAS Base 9.3 unter Windows), wobei per remote auf unseren SAS Server zugegriffen wird und anschl. mittels "rsubmit ... endrsubmit" alle data steps etc. auf unserem SAS Server laufen (auch die Datenbanken auf die zugegriffen wird befinden sich dort). Alles kein Problem! Nun ist es erforderlich einen SAS Job (SAS Programm) per batch laufen zu lassen, soll heißen, es wird überprüft ob eine bestimmte Datei vorhanden ist, wenn ja, startet ein batch Programm das lokal installierte SAS Programm und führt den code aus (welches u.a. diese vohandenen Datei dann weiter verarbeitet). Aus diversen Gründen suche ich nach einer Möglichkeit, NICHT per batch Programm das lokal installierte SAS Programm aufzurufen und laufen zu lassen. Vielmehr soll das SAS Programm direkt auf dem SAS Server liegen und dort gestartet werden (wenn irgendein spezielles Ereignis eintritt, bspw. ein bestimmtes file vorhanden ist). Kann man ein SAS Programm (im Prinzip dasselbe Programm dass bisher im Client unter Windows lief) direkt auf den SAS Server legen und dort aufrufen (ohne lokale SAS Client Version)? Wie kann dieses dann gestartet werden und wie kann die Ausführung überwacht werden? Merci vorab! prof

5 ANTWORTEN 5
mfab
Quartz | Level 8

Hallo prof,

das sollte kein Problem darstellen.

Falls entsprechende Lizenzen und Installationen vorhanden sind, kannst Du im Data Integration Studio einen Job erstellen und diesen anschließend in der Management Console im Schedule Manager verplanen.

Das hier im Detail zu beschreiben wäre wohl zu aufwändig und hängt, wie gesagt, eben vom vorhandenen Setup ab.

Ein direkter Aufruf auf der Server ist auch möglich. Z.B. per Cronjob unter Unix mit folgendem Aufruf:

/<Pfad zu SAS-Batch-Server>/sas.sh -log /<Pfad wo das Log hin soll>/log/name_des_programms_#Y.#m.#d_#H.#M.#s.log -batch -noterminal -logparm "rollover=session"  -sysin /<Pfad wo das Programm auf dem Server liegt>/Programmname.sas

Die Bedingung, ob ein File vorhanden ist, kann entweder im Batch geprüft werden, oder man programmiert eine Schleife mit "Sleep" im SAS Programm und führt den Code im Macro nur aus, wenn bestimmte Bedingungen erfüllt sind.

Auf einem Windows-Server geht das mit dem Task-Planer sicherlich analog.

Viele Grüße

Michael

prof
Calcite | Level 5

Super! Vielen Dank! Funktioniert wunderbar! Auch wenn ich nicht so ganz weiß was diese jeweiligen Einstellungen bedeuten/bewirken: -batch -noterminal -logparm "rollover=session"  -sysin Könnten Sie mir hierzu vielleicht noch kurz was schreiben?  😉 Besten Dank!

mfab
Quartz | Level 8

Hallo prof,

das ist schön zu hören!

Bis ins Detail kann ich die Parameter auch nicht zuordnen, vielleicht kann hier noch jemand aushelfen oder ergänzen. Meine Erklärungen:

-batch -- SAS läuft dann im Batch-Modus. Das könnte redundant zu "noterminal" sein. Leider finde ich in der Doku gerade keine weiteren Hinweise dazu. Wir wollen für die automatische Verarbeitung ja nicht den interaktiven Modus von SAS nutzen, bei dem ggf. ein User noch Eingaben während dem Ablauf des Programms machen muss, sondern wir wollen den automatisierten Batch-Modus verwenden.

-noterminal -- SAS läuft "ohne Terminal", sprich: es werden keine Dialogboxen für eventuellen Input oder Output generiert. Ein typischer Server-Parameter, wo eben niemand vor dem Bildschirm sitzt und die Verarbeitung der SAS-Programme verfolgt.

-logparm "rollover=session" -- legt den Logging-Parameter für "Rollover" fest. Das gibt an, was SAS machen soll, wenn z.B. ein Log voll läuft. Oder wann jeweils neue Log-Files erstellt werden sollen. In Kombination mit dem oben aufgeführten Parameter "-log" wird in diesem Fall vorgegeben, dass für diese SAS-Session (also diesen einen Aufruf) nur ein Log erstellt werden soll, das den oben angegeben Namen, bzw. entsprechende Uhrzeit hat. (hier finden sich noch weitere Infos dazu)

-sysin -- gibt an, welche Datei oder in diesem Fall welches SAS-Programm der Input für diese Session sein soll.

Ich hoffe, das hilft weiter.

Beste Grüße

Michael

Kurt_Bremser
Super User

Je nach Inhalt des Programms werden die meisten Parameter nicht notwendig sein. zB braucht man das rollover nicht, wenn sowieso Datum und Uhrzeit im namen des Logs verpackt sind, die "Session" endet automatisch mit Ende des Programmlaufs.

Im Batch verwenden wir "nur" den Programmnamen und die -noterminal, -log, -autoexec und -config Optionen.

Wenn Output in den Programmen erzeugt wird, dann per ODS und definierten Dateinamen, es wird als kein .lst automatisch erzeugt.

mfab
Quartz | Level 8

Ja, mit den default "rollover=none" sollte das kein Problem sein, danke für den Hinweis.

Ich habe hier einfach einen Aufruf aus dem DI-Studio von unserem System genommen 😉 dort wird das immer so mitgegeben.

sas-innovate-2024.png

Join us for SAS Innovate April 16-19 at the Aria in Las Vegas. Bring the team and save big with our group pricing for a limited time only.

Pre-conference courses and tutorials are filling up fast and are always a sellout. Register today to reserve your seat.

 

Register now!

Diskussionsstatistiken
  • 5 Antworten
  • 1159 Aufrufe
  • 0 Kudos
  • 3 in Unterhaltung