Publié le :
Administration CREATION_INTERNE

Exécuter une commande système distante et logger la sortie

Attention : Ce code nécessite des droits administrateur.
La macro `%rcmd2log` est conçue pour fonctionner dans un environnement SAS© où la capacité de soumettre du code à un serveur distant ('rsubmit') est disponible. Elle prend un unique paramètre, `cmd`, qui est la commande système à exécuter. Le mécanisme de fonctionnement repose sur l'utilisation d'une instruction `filename` avec l'option `pipe` à l'intérieur d'un bloc `rsubmit`. Cela permet au système d'exploitation distant d'exécuter la commande spécifiée et de traiter sa sortie standard comme un fichier. Un pas de données (`DATA _NULL_`) lit ensuite le contenu de ce 'fichier' pipe ligne par ligne et l'écrit dans le log SAS© local via l'instruction `put _infile_`, rendant ainsi la sortie de la commande système visible dans le log. Le fichier pipe est ensuite libéré. Cette approche est utile pour diagnostiquer ou interagir avec le système d'exploitation sous-jacent du serveur distant.
Analyse des données

Type : CREATION_INTERNE


Le script ne manipule pas de jeux de données SAS traditionnels ni ne lit de fichiers de données externes structurés. La 'donnée' traitée est la sortie standard générée dynamiquement par la commande système exécutée sur l'hôte distant. Cette sortie est capturée et affichée dans le log SAS, sans persistance en tant que jeu de données SAS.

1 Bloc de code
MACRO
Explication :
Ce bloc définit la macro `%rcmd2log` qui encapsule la logique d'exécution de commande système distante. La première ligne `%put` est un message informatif indiquant l'appel de la macro. À l'intérieur de la macro, `%syslput _rcmd=&cmd;` stocke la commande passée en paramètre dans une variable macro locale `_rcmd`. Le bloc `rsubmit; ... endrsubmit;` envoie le code qu'il contient pour exécution sur le serveur SAS distant. L'instruction `filename _rcmd pipe "&_rcmd";` est cruciale : elle exécute la commande système stockée dans `_rcmd` et établit une 'pipe' qui permet de lire sa sortie. Le `DATA _NULL_;` lit (`infile _rcmd; input;`) chaque ligne de la sortie de la commande système et l'écrit (`put _infile_;`) directement dans le log SAS de la session d'origine. Enfin, `filename _rcmd clear;` ferme et libère la pipe.
Copié !
1%put MACRO CALLED: rcmd2log v1.0;
2 
3%macro rcmd2log(cmd);
4 %syslput _rcmd=&cmd;
5 rsubmit;
6 filename _rcmd pipe "&_rcmd";
7 DATA _null_;
8 INFILE _rcmd;
9 INPUT;
10 put _infile_;
11 RUN;
12 filename _rcmd clear;
13 endrsubmit;
14%mend rcmd2log;
Ce matériel est fourni "tel quel" par We Are Cas. Il n'y a aucune garantie, expresse ou implicite, quant à la qualité marchande ou à l'adéquation à un usage particulier concernant le matériel ou le code contenu dans les présentes. We Are Cas n'est pas responsable des erreurs dans ce matériel tel qu'il existe maintenant ou existera, et We Are Cas ne fournit pas de support technique pour celui-ci.
Informations de Copyright : Ceci est un logiciel du domaine public. Aucune garantie quant à son adéquation ou sa précision n'est donnée ou implicite. L'utilisateur utilise ce code entièrement à ses propres risques.


Banner
Le Conseil de l'Expert
Expert
Simon
Expert SAS et fondateur.
« L'exécution de commandes système sur un serveur distant est une nécessité fréquente pour l'administration de plateformes distribuées. La macro %rcmd2log combine avec élégance deux fonctionnalités puissantes : SAS Connect pour la communication client-serveur et les Pipes pour l'interaction avec le système d'exploitation (OS). Cette approche permet de transformer le log SAS local en une véritable console de monitoring pour vos serveurs distants. »