Y a-t-il une variable sous Linux qui me montre la dernière fois que la machine a été allumée?

Je veux créer un script qui, sachant que ma machine est allumée depuis au moins 7h, fait quelque chose.

Est-ce possible? Existe-t-il une variable système ou quelque chose comme ça qui me montre la dernière fois que la machine a été allumée?

La commande suivante placée dans /etc/rc.local :

 echo 'touch /tmp/test' | at -t $(date -d "+7 hours" +%m%d%H%M) 

créera un travail qui exécutera un touch /tmp/test dans sept heures.

Pour vous protéger contre les redémarrages fréquents et empêcher l’ajout de plusieurs tâches, vous pouvez en utiliser une at queue exclusivement pour ce type de tâches (par exemple, la queue c ). L’ajout de -qc à la liste des parameters place le travail dans la queue c . Avant d’append un nouveau travail, vous pouvez supprimer tous les travaux de la queue c :

 for job in $(atq -qc | sed 's/[ \t].*//'); do atrm $job; done 

Je suppose que vous pouvez parsingr le rendement de la uptime .

Comme Pavel et Thkala l’indiquent ci-dessous, ce n’est pas une solution robuste. Voir leurs commentaires!

La commande de disponibilité indique la durée d’exécution du système.

Pour accomplir votre tâche, vous pouvez créer un script qui en premier sleep 25200 (25200 secondes = 7 heures), puis fait quelque chose d’utile. Faites en sorte que ce script s’exécute au démarrage, par exemple en l’ajoutant à /etc/rc.local. C’est une meilleure idée que d’interroger la commande de disponibilité pour voir si la machine est allumée depuis 7 heures (ce qui est comparable à un enfant sur la banquette arrière d’une voiture demandant “sums-nous encore là?” :-))

Il suffit d’attendre que le temps de disponibilité soit égal à sept heures.

http://linux.die.net/man/1/uptime

Je ne sais pas si c’est ce que vous recherchez, mais la commande de uptime vous indiquera le nombre d’ordinateurs en cours d’exécution depuis le dernier redémarrage.

 $ cut -d ' ' -f 1  

Cela vous donnera la disponibilité actuelle du système en quelques secondes, en format virgule flottante.

Les éléments suivants pourraient être utilisés dans un script bash:

 if [[ "$(cut -d . -f 1  

Ajoutez ce qui suit à votre crontab:

 @reboot sleep 7h; /path/to/job 

Soit / etc / crontab, /etc/cron.d/, soit vos utilisateurs crontab, selon que vous voulez l’exécuter en tant que root ou utilisateur – n’oubliez pas de mettre “root” après “@reboot” si vous mettez-le dans / etc / crontab ou cron.d

Cela a l’avantage que si vous redémarrez plusieurs fois, les travaux sont annulés à la fermeture, vous ne les accumulerez pas si vous les redémarrez plusieurs fois dans les 7 heures. La spécification de temps “@reboot” déclenche l’exécution du travail une fois au redémarrage du système. “dors 7h;” attend 7 heures avant d’exécuter “/ path / to / job”.