10.12 Sierra Terminal : automatiser des tâches

etu

Membre confirmé
8 Mai 2013
74
2
Yvelines, FRANCE
Bonjour,

J'ai Automator sur mon mac.

Régulièrement je "force" le système à executer des opérations de maintenance en lançant quelques commandes via le terminal :

Bloc de code:
ls -al /var/log/*.out

et/ou
Bloc de code:
sudo periodic daily
et/ou
Bloc de code:
sudo periodic weekly
et/ou
Bloc de code:
sudo periodic monthly

Comment faire pour créer un fichier script "executable" avec les commandes executées à la suite les unes des autres lorsque je fais un double-clic ?

Cordialement
 
Salut etu

Voici une solution qui fonctionne (que j'adresse indirectement à l'attention de bompi dans l'intention malicieuse de le faire bondir > par cet échappatoire à une inscription de privilège dans le fichier sudoers) :

afin de ne plus avoir à passer de commande periodic en sudo > tu passes la commande préliminaire :
Bloc de code:
sudo chmod 4755 /usr/sbin/periodic

  • cette commande remplace l'executable_bit x de root sur le fichier periodic > par un setuid_bit s (set_user_id_bit). Cette substitution a l'effet suivant : tout utilisateur qui appelle la commande periodic > se trouve substitué en exécution par root --> ce qui fait qu'aucun sudo n'est plus jamais requis sur cette commande *.
[* à bon entendeur : salut ! ]

Note : si un "permission denied" s'affiche en retour de la commnade > c'est que le SIP sera activé. Pour le désactiver > ouvrir la session de secours (démarrage avec ⌘R) et passer la commande :
Bloc de code:
csrutil disable
dans son
Terminal. Redémarrer > passer la commande dans le Terminal de la session d'utilisateur. Pour réactiver le SIP commande :
Bloc de code:
csrutil enable
da capo dans le Terminal de la session de secours.

----------

tu lances l'Éditeur de script (Applications > Utilitaires) > et dans la fenêtre de saisie de script > tu colles la ligne que je t'affiche dans une fenêtre de code -->
Bloc de code:
do shell script "ls -al /var/log/*.out ; periodic daily ; periodic weekly ; periodic monthly"

  • la ligne saisie > tu presses l'icône de pic égrisoir dans les petits menus du panneau pour compiler > puis tu vas dans la grande barre de menus à : Fichier > Exporter --> tu exportes le fichier en choisissant le Format : "Application" (et pas Script) > et l'emplacement que tu souhaites.
----------

=> un double-clic sur ton application "maison" exécute en chaîne les 4 commandes.
 
Dernière édition par un modérateur:
Ce qui m'intrigue est que tu aies besoin de les lancer manuellement : ces scripts sont plutôt bien calibrés.
J'en déduis qu'à tes yeux il y a une défaillance quelque part : laquelle ?

/* ---------------------- */

Effectivement, je trouve tout à fait aberrante la manipulation proposée ci-dessus parce qu'elle va à l'encontre de la logique du système, en général, et en particulier pour la sécurité. :)

[Étant modérateur, je trouverais vraiment mal venu de ma part de donner des conseils fragilisant le système, indépendamment de ce que je peux faire sur mes systèmes quand j'ai envie de m'amuser.]

On peut parfaitement faire en sorte que tu n'aies plus à taper de mot de passe à l'exécution de ces commandes, sans pour autant autoriser toute personne à le faire sans plus aucun contrôle.

Tout est prévu : c'est dans le paramétrage de sudo que ça se passe. Et comme c'est prévu, c'est propre et cohérent.
Il faut éditer ces paramètres et la manière conseillée est de lancer la commande :
Bloc de code:
sudo visudo
L'avantage est que lorsque tu enregistres tes modifications, il y a un contrôle syntaxique du fichier : si la syntaxe n'est pas respectée, tout est laissé inchangé. Ce qui évite de se retrouver avec un système inopérant...

Bref, supposons que ton identifiant court soit brol (on a au moins une chose en commun avec @macomaniac , c'est le brol...)
En ajoutant les lignes suivantes dans la configuration de sudo :
Bloc de code:
brol  ALL=NOPASSWD: /usr/sbin/periodic
tu pourras dorénavant taper la commande :
Bloc de code:
sudo /usr/sbin/periodic daily
(ou tout autre paramètre : weekly etc.)
sans avoir à taper de mot de passe.

Tu pourras alors créer un script : bash, Automator, AppleScript, utilisant sudo /usr/sbin/periodic comme tu le souhaites.

Tu peux ajouter aussi d'autres commandes soit sur la même ligne, séparées par des virgules, ou dans d'autres lignes avec la même syntaxe et elles-aussi seront disponibles sans mot de passe.
Il faut mettre le chemin complet pour éviter toute ambigüité et ne pas leur affecter de paramètres (c'est la commande qui compte et elle fonctionnera quel que soit les paramètres qu'on lui passe).

Note : visudo utilise l'éditeur vi. Si tu préfères un autre éditeur : emacs, nano... il est facile de le spécifier.
Tu passes la commande (ici avec nano) :
Bloc de code:
export EDITOR=/usr/bin/nano
avant de lancer :
Bloc de code:
sudo visudo
 
Bonjour à tous,
merci pour vos messages.
Pour le moment, je préfère devoir entrer "manuellement" le mot de passe de ma session administrateur lorsque je lance la commande.
Tout ce que je souhaite c'est qu'au double-clic, le terminal "pré-charge" la commande et me demande le mot de passe avant d'executer l'ordre.
Comment faire ?
Cordialement,
 
:coucou: etu

Alors > sans aucune action préalable --> tu te contentes de lancer l'Éditeur de script > et de coller dans la fenêtre de saisie de script qui s'affiche cette ligne :
Bloc de code:
do shell script "ls -al /var/log/*.out ; sudo periodic daily ; sudo periodic weekly ; sudo periodic monthly"

  • puis tu compiles le script (icône du pic) et tu enregistres ton script au format Application

Lorsque tu feras un double-clic sur l'icône de ton application --> une boîte de dialoque s'affichera te demandant de saisir ton mot-de-passe de session admin (pour exécution du 1er sudo = sudo periodic daily) -->

  • une fois le mot-de-passe saisi et validé --> la commande s'exécutera > et les 2 autres commandes sudo à la chaîne sans nouvelle demande de mot-de-passe - car une fois une authentification pour un sudo effectuée > un délai de 5' est accordé par défaut permettant de passer dans la foulée autant de sudo qu'on voudra sans nouvelle authentification.
 
:merci:

Il doit y avoir une erreur dans le code
Bloc de code:
do shell script "ls -al /var/log/*.out ; sudo periodic daily ; sudo periodic weekly ; sudo periodic monthly"
voici la réponse du système
sudo: no tty present and no askpass program specified
sudo: no tty present and no askpass program specified
sudo: no tty present and no askpass program specified

Savez-vous d'où provient l'erreur dans le script ? :banghead:

Bonne soirée:penguin:
 
Modifie le script ainsi (déroule le tapis roulant horizontal jusqu'au bout) -->
Bloc de code:
do shell script "ls -al /var/log/*.out ; sudo periodic daily ; sudo periodic weekly ; sudo periodic monthly" with administrator privileges

  • tu fais un ctrl_clic sur l'application > Ouvrir avec --> Éditeur de script --> tu ajoutes with administrator privileges à la fin du script précédent (après avoir sauté un espace) > tu recompiles > tu enregistres

Normalement : un double_clic sur l'application devrait afficher une boîte de dialogue avec ton nom d'utilistateur pré-renseigné > et la case de saisie du mot-de-passe à remplir + un bouton "OK" pour valider.
 
Dernière édition par un modérateur:
  • J’aime
Réactions: etu
Hello,
merci pour la commande
Bloc de code:
do shell script "ls -al /var/log/*.out ; sudo periodic daily ; sudo periodic weekly ; sudo periodic monthly" with administrator privileges
. L'application s'execute en mode "silencieux" une fois le mot de passe saisi dans la boîte de dialogue.
Sais-tu comment faire apparaître une fenêtre du terminal/shell afin de suivre l'avancement ?
Cordialement
 
Pour taper mon mot de passe au lieu du rectangle noir j' ai une clé et mn mdp n' est pas pris en compte il m' est demandé de recommencer: Sorry try again?
Solution?
OSX 10.13.6
 
La clef a été ajoutée il y a déjà quelques versions de macOS : c'est simplement pour être plus explicite et avertir les utilisateurs que ce qu'ils tapent est un mot de passe donc que c'est caché.

Si ça ne marche pas c'est que tu te trompes de mot de passe ou que tu es dans une autre session ou que tu n'as pas de mot de passe, ce qui empêche sudo de travailler de la sorte [il faut dans ce cas en changer le paramétrage].
 
La clef a été ajoutée il y a déjà quelques versions de macOS : c'est simplement pour être plus explicite et avertir les utilisateurs que ce qu'ils tapent est un mot de passe donc que c'est caché.

Si ça ne marche pas c'est que tu te trompes de mot de passe ou que tu es dans une autre session ou que tu n'as pas de mot de passe, ce qui empêche sudo de travailler de la sorte [il faut dans ce cas en changer le paramétrage].
Bonjour,
je ne cherche pas à avoir le mot de passe "en clair" mais l'execution des commandes "en clair" histoire de savoir à quelle étape le script se trouve.
Cordialement
 
Bonjour,
je ne cherche pas à avoir le mot de passe "en clair" mais l'execution des commandes "en clair" histoire de savoir à quelle étape le script se trouve.
Cordialement
[Je répondais à @lhallier ]

Je me demande si le plus simple ne serait pas tout bonnement d'avoir un script bash à exécuter, plutôt que Automator :
  1. tu crées ton script :
    Bloc de code:
    #!/bin/sh
    ls -al /var/log/*.out
    sudo periodic daily
    sudo periodic weekly
    sudo periodic monthly
  2. tu l'enregistres dans un fichier avec l'extension .command, disons Periodic.command ;
  3. tu changes ses attributs pour en faire un exécutable (j'ai mis le chemin du bureau pour l'exemple) :
    Bloc de code:
    chmod +x $HOME/Desktop/Periodic.command
  4. quand tu en as besoin, tu lances le script depuis le Finder en double-cliquant dessus : cela t'ouvrira une fenêtre de Terminal qui t'affichera les sorties normales et que tu pourras fermer à la fin.
Une autre idée : l'ornithorynque, Platypus. Sa dernière version date de 2017 donc elle doit bien fonctionner sur High Sierra.
C'est assez pratique ; il permet de voir les sorties générées par le script encapsulé.