web-dev-qa-db-fra.com

Pourquoi mon script bash ne fonctionne pas avec cron?

J'ai créé un script bash pour mettre à jour automatiquement mon serveur Ubuntu. Voici le script:

#!/bin/bash

apt-get update
apt-get upgrade
echo "Update am $(date "+%d. %m. %y|%H:%M:%S) >> /var/log/update.log
exit 0

Le fichier journal est toujours vide. crontab:

0 3 * * * /drives/files/scripts/update.sh

Je sais, que je peux définir, que le serveur Ubuntu soit mis à jour automatiquement dans les paramètres, mais ceci est destiné à vous familiariser avec cron et un peu de script.

Merci

4
ssd_rider

Je suppose que vous utilisez crontab avec un utilisateur normal, ce qui signifie qu'il ne peut pas mettre à jour/mettre à niveau un système sans fournir de Sudo.

De plus, apt-get update et apt-get upgrade demanderont à l'utilisateur une confirmation, vous devrez donc la transmettre avant.

yes | apt-get update
yes | apt-get upgrade

Donc, pour le résoudre, vous devez exécuter vos commandes avec Sudo, mais cela vous empêchera de fournir le mot de passe à Sudo.

De plus

echo  "Update am "$(date "+%Y-%m-%d %H:%M:%S") >> /var/log/update.log

écrit dans/var/log/... ce qui signifie qu’il faut avoir l’autorisation pour faire ce qui n’est pas fondé pour un utilisateur normal.

Afin de résoudre ce problème, vous devez exécuter votre script dans le répertoire racine.

Sudo crontab -e

ouvrira le fichier racine cron dans votre éditeur par défaut.

Ajoutez l'entrée de votre script

0 3 * * * /drives/files/scripts/update.sh

Maintenant, enregistrez et quittez.

PS: juste au cas où, assurez-vous de donner le droit d'exécution pour votre script. Pour ce faire, exécutez la commande:

chmod +x /path-to-script
1
Maythux

Pourquoi ça ne marche pas?

Pour faire apt-get update et apt-get upgrade vous devez devenir un utilisateur Sudo. Je veux dire que votre script doit être exécuté avec les privilèges Sudo.

D'autres arrêts?

Oui, vous ne donnez pas -y qui laisse la commande de mise à jour télécharger automatiquement après la mise à jour.

Est-ce une chose majeure?

Oui, si vous ne passez pas -y avec la commande, votre cron s'arrêtera et recherchera l'argument '-y' et il n'exécutera pas jusqu'à ce qu'il obtienne le -y.

Comment exécuter le script cron en tant qu'utilisateur root?

Sudo crontab -e

Il vous demandera de choisir l'éditeur et choisissez nano, puis ajoutez-y votre ligne. Mais le script complet devrait être ceci

apt-get update
apt-get upgrade -y
apt-get dist-upgrade -y

J'espère que ça t'as aidé.

0
rɑːdʒɑ