2017-03-21 3 views
1

J'ai besoin d'utiliser crontab pour ajouter de nouvelles tâches à faire à un certain moment. J'ai besoin d'ajouter ces tâches en utilisant un script. Je vais faire quelque chose comme:Comment ajouter une nouvelle tâche dans crontab en utilisant un script

echo "command" >> /etc/crontab 

Mais je sais que ce fichier crontab est juste pour l'utilisateur root, donc je dois utiliser:

crontab -e 

pour ouvrir ma propre liste de tâches. Le problème est la commande précédente ouvre un fichier temporaire et je ne peux pas le localiser. (Il a un nom aléatoire dans/tmp ou quelque chose?) Je vais faire quelque chose comme:

echo "5 5 5 5 5 user command" | crontab -e 

d'écrire une nouvelle ligne dans ma propre liste de crontab, mais cela ne fonctionne pas.

Est-ce que je me trompe? Est-ce que quelqu'un a une idée pour résoudre cela? J'utilise Ubuntu.

Répondre

1

crontab utilise ce fichier temporaire pour vous permettre d'insérer de nouvelles commandes. Vous n'avez pas à éditer votre propre fichier, ou à manipuler la copie du fichier du système. Au lieu de cela, essayez de créer votre propre fichier; puis nous ** crontab -l pour obtenir que répertorié dans le système crontab.

Si vous êtes têtu, vous pouvez essayer de flux d'alimentation vi commandes à crontab -e, mais ce fait des choses à la dure.

Est-ce suffisant pour vous lancer?

1

Vous rencontrez des difficultés avec votre approche actuelle car crontab -e ne lit pas à partir de stdin. Toutefois, crontab sans le commutateur -e, lit à partir de stdin.

La façon la plus évidente consiste à ajouter que la nouvelle tâche cron au crontab existant:

crontab -l > current_cron 
cat >> current_cron << EOF 
# new cron job here 
EOF 
crontab < current_cron 
rm -f current_cron 

La question évidente avec cette approche est qu'il n'y a pas de vérification pour voir si le travail cron existe déjà . C'est là que ça peut être un peu difficile.

Une façon d'aborder ce serait d'avoir une « section gérée de script » dans crontab, en général, au fond:

# DO NOT MODIFY THE SECTION BELOW MANUALLY. IT'S MANAGED BY AUTOMATION. 
#---script managed section--- 
"cron job 1" 
"cron job 2" 

Ensuite, un script peut gérer cette section - il est préférable d'avoir un seul script qui gère toutes les tâches cron automatique:

crontab -l > current_cron 
sed '/---script managed section---/q' current_cron > new_cron 
cat >> new_cron << EOF 
# updated cron jobs here 
EOF 
crontab < new_cron 
rm -f new_cron current_cron 

Si nous avons besoin encore plus de contrôle à grains fins, alors nous pouvons avoir une section pour chaque tâche cron géré, avec début et marqueurs de fin et de faire l'accord de script avec section spécifique à chaque fois.

Cependant, il existe une meilleure idée pour Ubuntu. Nous pouvons complètement supprimer crontab et utiliser /etc/cron.d à la place. Ici, nous avons un fichier pour chaque travail cron qui suit le format exact d'une spécification de travail cron. Comme il existe une correspondance 1: 1 entre les tâches cron et les fichiers /etc/cron.d, elles sont gérées directement en tant que fichiers plutôt que par l'intermédiaire de la commande crontab et, par conséquent, l'automatisation est beaucoup plus facile.

De man cron sur Ubuntu:

Dans Debian, lit les fichiers Cron dans le répertoire /etc/cron.d. cron traite les fichiers dans /etc/cron.d de la même manière que le fichier/etc/crontab (ils suivent le format spécial de ce fichier, c'est-à-dire qu'ils incluent le champ utilisateur). Cependant, ils sont indépendants de/etc/crontab: ils n'héritent pas, par exemple, des paramètres de variable d'environnement. Ce changement est spécifique à Debian.