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. P>
Voici ce que j'ai jusqu'à présent: p> essentiellement, j'aurais besoin de vérifier si tout est allé Bien sur les lignes 7 et 8, et si oui, exécutez 9. P> 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> p>
4 Réponses :
Le moyen facile de sortir, mais sans message d'erreur explicite ajout cron devrait vous donner un message d'erreur via le courrier que je suppose cependant. P>
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. P> -E code> au shebang, c'est-à-dire
#! / bin / sh -e code> qui provoquera la coque Sortie si une commande échoue .. p>
Excellente suggestion. J'utilise toujours -e code> 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 code>. TL; DR - "N'utilisez pas
set -e code>"
gnu gare a Votre - supprimer-fichiers code> qui supprimera les fichiers une fois qu'ils ont été ajoutés à l'archive.
V code> entraînera la répertorie des fichiers car il les ajoute.
z code> tuyera le goudron à travers gzip à la volée. P>
La solution code> est racé. Un fichier peut correspondre aux critères entre les invocations, ce qui est donc supprimé mais non sauvegardé. P>
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 ..
Pour la journalisation, vous pouvez envelopper des sections de votre script dans des accolades bouclées et rediriger le stdout vers un fichier journal:
Kewl, j'espère que cela fonctionnera si je l'écris comme ceci: } >> $ {journal} 2> & 1 code>
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: Pour exécuter une commande uniquement si un précédent réussit, vous pouvez les chaîner avec des conditionnels: P> < Pré> xxx pré> afin que vous puissiez faire des choses comme p> ou fournir des détails dans la sortie du journal: p>
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!