7
votes

Bash Scripting, vérification des erreurs, journalisation

Voici un pour les wizards Bash-Fu. Non, en fait, je plaisante, vous en feriez probablement tout cela sauf pour moi ..

J'essaie de créer un script shell de sauvegarde. L'idée est assez simple: trouver des fichiers dans un certain dossier, plus de 7 jours, Tar / Gzip dans un autre répertoire et les supprimer. Le problème est que je ne sais pas si j'aurai suffisamment d'autorisations pour créer un fichier gare / gzip dans le dir cible. Existe-t-il une manière (appropriée) de vérifier si le fichier a été créé avec succès et, dans l'affirmative, supprimez les fichiers. Sinon, sautez cette partie et ne détruisez pas les données des clients. J'entends qu'ils ne sont pas très friands.

Voici ce que j'ai jusqu'à présent: xxx

essentiellement, j'aurais besoin de vérifier si tout est allé Bien sur les lignes 7 et 8, et si oui, exécutez 9.

En outre, j'aimerais faire un fichier journal de ces opérations afin que je sais que tout s'est bien passé (c'est un travail de cron nocturne). < / p>


4 commentaires

Ici vient tous les commentaires, utilisez quelque chose pré-fabriqué sa sécurité.


Parlant d'expérience, récursion? :)


Votre tag dit "Bash", mais votre Shebang dit "sh".


J'ai accepté la réponse de Dennis Williamson parce qu'il était le seul à s'attaquer à la question de la journalisation, mais toutes les suggestions ont été très utiles, merci les gars!


4 Réponses :


6
votes

Le moyen facile de sortir, mais sans message d'erreur explicite ajout -E au shebang, c'est-à-dire #! / bin / sh -e qui provoquera la coque Sortie si une commande échoue ..

cron devrait vous donner un message d'erreur via le courrier que je suppose cependant.

Si vous voulez faire un schéma de sauvegarde époustouflé complet, je vous suggère d'utiliser quelque chose qui a déjà été fait. Il y a un tas là-bas et la plupart travaillent très bien.


4 commentaires

Excellente suggestion. J'utilise toujours -e dans mes scripts.


Merci pour la pointe, très utile! Malheureusement, Cron ne nous enverra rien car nous ne sommes pas les administrateurs de ce système. Ce serait bien cependant ..


@dr: Ce sera si vous définissez le mailto dans votre crontab.


Voir Bashfaq / 105 concernant Bash -e . TL; DR - "N'utilisez pas set -e "



3
votes

gnu gare a - supprimer-fichiers qui supprimera les fichiers une fois qu'ils ont été ajoutés à l'archive. V entraînera la répertorie des fichiers car il les ajoute. z tuyera le goudron à travers gzip à la volée.

Votre La solution est racé. Un fichier peut correspondre aux critères entre les invocations, ce qui est donc supprimé mais non sauvegardé.


1 commentaires

Merci pour votre réponse. Il est fortement improbable qu'un dossier soit adapté entre les invocations, car ce script fonctionnera à 4 heures du matin lorsque aucun fichier ne doit être créé dans le dossier que je sauvegarde. Bien sûr, il y a toujours qu'un utilisateur ..



7
votes

Pour la journalisation, vous pouvez envelopper des sections de votre script dans des accolades bouclées et rediriger le stdout vers un fichier journal: xxx


1 commentaires

Kewl, j'espère que cela fonctionnera si je l'écris comme ceci: } >> $ {journal} 2> & 1



15
votes

Pour la journalisation, vous pouvez organiser toute sortie écrite sur la sortie standard et / ou l'erreur standard pour accéder à un fichier. De cette façon, vous n'avez pas besoin de rediriger la sortie de chaque commande: xxx

Pour exécuter une commande uniquement si un précédent réussit, vous pouvez les chaîner avec des conditionnels: < Pré> xxx

afin que vous puissiez faire des choses comme xxx

ou fournir des détails dans la sortie du journal: xxx


0 commentaires