2 votes

Exécuter un Shell Shell en arrière-plan dans Unix à une heure précise quotidiennement.

Je dispose d'un Shell Shell. task.sh qui doit être exécuté en arrière-plan sous Unix à une heure précise chaque jour.

Je sais nohup est utile pour exécuter le script en arrière-plan. Mais je m'inquiète de savoir comment programmer ce script pour qu'il s'exécute quotidiennement à une heure précise.

Nota: Je ne suis pas un utilisateur root. Je n'ai pas les permissions pour crontab commandement.

Toute aide serait grandement appréciée.

2voto

porto alet Points 315

La façon correcte de le faire est d'utiliser Crontab - si vous n'avez pas accès à votre crontab, vous devriez vraiment parler à votre administrateur - il ne veut probablement pas que vous exécutiez des tâches planifiées. Cela dit, avant de dire que vous n'avez pas les permissions pour la commande crontab, essayez d'exécuter "crontab -e" - chaque utilisateur a son propre fichier cron, et crontab - tentera de modifier le vôtre. (Je note que lorsque je lance crontab par lui-même en tant qu'utilisateur, il se fige).

Vous pouvez faire en sorte que pratiquement n'importe quelle tâche s'exécute en arrière-plan en ajoutant le caractère "&" à la tâche. Je vous déconseille vivement de le faire, mais vous pourriez écrire un script dans une boucle while qui vérifie l'heure, puis attend une minute, vérifie à nouveau etc, et s'il correspond, exécute la commande. Vous pourriez exécuter ce script avec & pour l'exécuter en arrière-plan. Vous pourriez aussi avoir des problèmes pour avoir subverti le système.....

Une autre commande à consulter est "screen". Elle vous permet d'attacher et de détacher votre terminal de la console - cela peut être un moyen utile d'exécuter quelque chose en arrière-plan, tout en étant capable de le voir et d'interagir avec lui (vous pouvez faire écran, puis exécuter le programme en avant-plan, puis vous détacher de l'écran, et le rattacher plus tard).

エディテージ

Un script pour vérifier l'heure une fois par minute et exécuter la commande au moment approprié :

#! /bin/bash

RUNAT="07:54"

while [ 1 ]
do
    DATE=`/bin/date +%H:%M`
    if [ $DATE. = $RUNAT. ]
    then
        /path/to/script.sh
    fi

    sleep 60
done

Enregistrez ceci sous (par exemple) mycron.sh, chmod 755 mycron.sh pour qu'il s'exécute, Modifiez la ligne RUNAT pour qu'elle se déclenche lorsque vous voulez que votre script s'exécute, puis exécutez ce script en tant que mycron.sh & afin qu'il s'exécute en arrière-plan.

Ce script ne fera déborder aucune pile car il n'exécute la commande qu'une fois par jour, il ne "s'enchaîne pas".

1voto

Gombai Sándor Points 3990

A condition que vous ayez accès à à l'adresse (peu probable si cron n'est pas disponible mais vaut la peine d'être essayé) vous pouvez émuler des tâches cron simples. La façon la plus simple de le faire est d'utiliser la commande à l'adresse exécuter le script à un moment donné, et laisser le script faire à l'adresse se remettre en marche quand il le faut.

Dans mon exemple, le script écrit seulement l'horodatage de sa dernière exécution et fait le chronométrage d'une minute :

/tmp$ cat cronbyat.sh
#!/bin/sh

echo "last run: `date +%Y%m%d-%H%M%S`" >> /tmp/cronbyat.log

echo "/tmp/cronbyat.sh" | at now + 1 minute

/tmp$ echo "/tmp/cronbyat.sh" | at now + 1 minute
warning: commands will be executed using /bin/sh
job 5 at Mon Feb 15 09:00:00 2016
/tmp$ tail -f /tmp/cronbyat.log
last run: 20160215-090000
last run: 20160215-090100
last run: 20160215-090200
last run: 20160215-090301
last run: 20160215-090400
^C
/tmp$ atq
10      Mon Feb 15 09:05:00 2016 a lx
/tmp$ atrm 10
/tmp$ atq
/tmp$

Lorsque le script n'est plus nécessaire, son at job actuel doit être tué comme indiqué dans les dernières lignes. Malheureusement, si une exécution est manquée pour une raison quelconque, la chaîne est rompue. Ainsi, une certaine forme de retour d'information devrait être donnée et vérifiée.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X