2010-11-14 35 views
3

Existe-t-il un moyen de créer un travail cron temporaire unique à partir de la ligne de commande? Je voudrais avoir un sablier comme fonction d'ouvrir un terminal et faire:Création d'un travail cron temporaire à partir du terminal

notify "time is up" 30 

qui serait tout simplement exécuter ce après 30 minutes:

zenity --info --text="time is up" 

Il me semble assez pour facile de créer , mais j'ai du mal à croire que personne n'a créé quelque chose de similaire. La recherche dans le référentiel d'Ubuntu pour les paquets de timing ne montre rien. Cela a-t-il déjà été fait?

Répondre

4

Si vous savez que votre $DISPLAY sera le même, vous pouvez le faire:

echo "DISPLAY=$DISPLAY zenity --info --text=\"time is up\"" | at now + 30 minutes 

Fournir l'environnement variable de cette manière le rendra disponible à zenity lorsqu'il sera exécuté.

+0

Brilliant. Fonctionne parfaitement. Merci. – Cerin

9

Utilisez la commande at.

$ at now + 30 minutes 
at> zenity --info --text="time is up" 
at> ^D  (press CTRL-D) 

Le format de l'heure est assez flexible. Voici un tas d'exemples.

$ at 11:45 

$ at 0800 Friday 

$ at 4pm + 3 days 

$ at 9am tomorrow 
+0

Comment entreriez-vous la commande at sur une seule ligne? – Cerin

+0

at ne semble pas avoir les bonnes variables définies pour lancer des programmes X. – Cerin

+0

lors de travaux sont supposés hériter de toutes les variables d'environnement définies lors de l'initialisation du travail, mais comme il sera exécuté par le service 'atd, il ne sera pas associé à votre affichage X. Vous pourriez ne pas avoir de chance là-bas. Voir mon autre réponse. –

2

Vous pourriez écrire vous-même un petit script.

#! /bin/bash 
sleep $(($2 * 60)) 
zenity --info --text="$1" 

le rendre exécutable et l'exécuter à partir de la ligne de commande:

./notify "Time is up" 30 
+0

et si ce n'est pas clair à l'op, vous pouvez également dormir 1800; zenity --info --text = "$ 1" – frankc