GNU/Linux >> Tutoriels Linux >  >> Linux

Le @reboot de Crontab ne fonctionne que pour Root ?

man 5 crontab est assez clair sur la façon d'utiliser crontab pour exécuter un script au démarrage :

   These special time specification "nicknames" are supported, which replace the 5 initial time and date
   fields, and are prefixed by the `@` character:
   @reboot    :    Run once after reboot.

J'ai donc joyeusement ajouté une seule ligne à ma crontab (sous mon compte utilisateur, pas root):

@reboot     /home/me/myscript.sh

Mais pour une raison quelconque, myscript.sh ne s'exécuterait pas au redémarrage de la machine.
(il fonctionne correctement si je l'invoque depuis la ligne de commande, ce n'est donc pas un problème d'autorisations)

Qu'est-ce que je rate ?

Mise à jour pour répondre aux questions d'@Anthon :

  1. Version Oracle-linux : 5.8 (nom :2.6.32-300.39.2.el5uek #1 SMP)
  2. Version Cron :vixie-cron-4.1-81.el5.x86_64
  3. Oui, /home est une partition montée. On dirait que c'est le problème. Comment puis-je contourner ce problème ?
  4. Actuellement, myscript.sh renvoie uniquement un message texte dans un fichier dans /home/me .

Réponse acceptée :

Cela peut être un sujet un peu déroutant car il existe différentes implémentations de cron. De plus, plusieurs bogues ont interrompu cette fonctionnalité, et il existe également des cas d'utilisation où cela ne fonctionnera tout simplement pas, en particulier si vous effectuez un arrêt/démarrage plutôt qu'un redémarrage.

Bogues

point de données 1

Un de ces bogues dans Debian est couvert ici, intitulé :cron :les tâches @reboot ne sont pas exécutées. Cela semble également avoir fait son chemin dans Ubuntu, ce que je ne peux pas confirmer directement.

point de données 2

La preuve du bogue dans Ubuntu semblerait être confirmée ici dans ce SO Q&A intitulé :@reboot cronjob not running.

extrait

commentaire #1 :…. 3) votre version de crond peut ne pas prendre en charge @reboot utilisez-vous le crond de vix ? … afficher les résultats de l'utilisateur crontab -l -u

commentaire n° 2 :                                                                     Cron

commentaire #3 :… @MarkRoberts a supprimé le redémarrage et modifié le 1 * * * * , en */1 * * * * , le problème est résolu ! Où dois-je envoyer le représentant pts Mark ? Merci !

La réponse acceptée dans cette Q&A contenait également ce commentaire :

Il me semble que Lubuntu ne prend pas en charge la syntaxe @Reboot Cron.

Preuve supplémentaire

point de données #3

Comme preuve supplémentaire, il y avait ce fil que quelqu'un tentait exactement la même chose et était frustré que cela ne fonctionne pas. Il s'intitule :Thread :Cron - Les tâches @reboot ne fonctionnent pas.

extrait

Re :Cron - Les tâches @reboot ne fonctionnent pas

Citation Envoyé à l'origine par ceallred Voir le message
Cela me tue… J'ai essayé le script wrapper. L'exécution manuelle génère le fichier journal... le redémarrage et le travail ne s'exécute pas ou ne crée pas de fichier journal.

Syslog montre que CRON a exécuté le travail… mais encore une fois, aucune sortie et le processus ne s'exécute pas. /> 15 juillet 20:07:45 RavenWing CRON[1053] :(ceallred) CMD (/home/ceallred/Scripts/run_spideroak.sh> /home/ceallred/Scripts/SpiderOak.log 2>&1 &)

Il semble que cron n'aime pas la commande @reboot…. D'autres idées ?

D'accord… Partiellement résolu. Je vais marquer celui-ci comme résolu et démarrer un nouveau fil avec le nouveau problème…..

Je pense que la réponse était que mon répertoire personnel chiffré n'était pas monté lorsque CRON essayait d'exécuter le script (stocké dans /home/username/scripts). Déplacé vers /usr/scripts et le travail s'exécute comme prévu.

Alors maintenant, cela semble être un problème de spideroak. Le processus démarre, mais au moment où le processus de démarrage est terminé, il est parti. Je suppose un accident pour une raison quelconque…. Nouveau fil pour poser des questions à ce sujet.

Merci pour toute l'aide !

Une fois que cet utilisateur ci-dessus a compris son problème, il a pu obtenir @reboot élaboration de l'entrée crontab d'un utilisateur.

En relation :Pourquoi ne trouve-t-on pas read /run/user/1000/gvfs même s'il s'exécute en tant que root ?

Je ne sais pas exactement quelle version de cron est utilisée sur Ubuntu, mais cela semblerait indiquer que l'utilisateur peut utiliser @reboot aussi, ou que le bogue a été corrigé à un moment donné dans les versions ultérieures de cron.

point de données #4

J'ai testé sur CentOS 6 ce qui suit et cela a fonctionné.

Exemple

$ crontab -l
@reboot echo "hi" > /home/sam/reboot.txt 2>&1

J'ai ensuite redémarré le système.

$ sudo reboot

Après le redémarrage.

$ cat reboot.txt 
hi

À emporter

  1. Cette fonctionnalité semble être prise en charge pour les entrées crontab système et utilisateur.
  2. Vous devez vous assurer qu'il est pris en charge/fonctionne dans votre distribution et/ou version particulière du package cron.

Pour en savoir plus sur le fonctionnement du mécanisme réel pour @reboot Je suis tombé sur ce billet de blog qui traite des entrailles. Il s'intitule :@reboot - expliquer la magie cron simple.

Crond de débogage

Vous pouvez augmenter la verbosité de crond en ajoutant ce qui suit à ce fichier de configuration sur les distributions basées sur RHEL/CentOS/Fedora.

$ more crond 
# Settings for the CRON daemon.
# CRONDARGS= :  any extra command-line startup arguments for crond
CRONDARGS="-L 2"

Les niveaux valides sont 0, 1 ou 2. Pour rétablir ce fichier à son niveau de journalisation par défaut, supprimez simplement le "-L 2" lorsque vous avez terminé de déboguer la situation.


Linux
  1. Quel est le mot de passe root par défaut pour MySQL 5.7

  2. @reboot ne fonctionne pas dans CRON

  3. Linux trouve/recherche la partition racine UNIQUEMENT ?

  4. le mot de passe root ne fonctionne pas pour su dans le terminal

  5. Est-il possible pour root d'exécuter une commande en tant que non root ?

Conseils Linux pour utiliser cron pour planifier des tâches

Comment afficher ou répertorier les tâches Cron sous Linux

Diff -r uniquement pour certains types de fichiers ?

Où est .bashrc pour root ?

Activer le mot de passe simple pour l'utilisateur root sur CentOS

Comment utiliser @reboot dans /etc/cron.d