Comment démarrer automatiquement un programme en arrière-plan par un utilisateur non root?

14

En tant qu'utilisateur non root, je souhaite exécuter une tâche en arrière-plan au démarrage du système. C'est une sorte de service qui ne nécessite pas de privilège root. Y a-t-il un moyen de le faire?

Une façon est de mettre sudo -u user commanden rc.local, mais l' édition rc.localnécessite des privilèges root.

Une autre façon consiste à le lancer à cronchaque minute et à rechercher toute instance en cours d'exécution, mais d'une part, il réveille le système inutilement et d'autre part, il peut y avoir une condition de concurrence lors de la vérification des instances en cours d'exécution.

Une troisième façon consiste à l'exécuter ~/.bash_profile, mais je veux le démarrer sans connexion utilisateur.

Wu Yongzheng
la source

Réponses:

17

Vous pouvez utiliser cron si votre version dispose de la @rebootfonctionnalité. De l' homme 5 crontab :

Au lieu des cinq premiers champs, l'une des huit chaînes spéciales peut apparaître:

  string         meaning
  ------         -------
  @reboot        Run once, at startup.
  …

Vous pouvez éditer un crontab utilisateur-local avec la commande crontab -e sans privilèges root. Ajoutez ensuite la ligne suivante:

@reboot /usr/local/bin/some-command

Maintenant, votre commande sera exécutée une fois au démarrage.

Marco
la source
Est-il inhabituel crontab -ede créer le fichier cron sous /tmp?
Warlike Chimpanzee
@Elliott Cela dépend de votre éditeur. À la fin, le fichier se retrouvera /var/spool/cron/crontabs.
Marco