Obtenir un script à exécuter au démarrage, pas à la connexion

11

Comment puis-je obtenir un script spécifique à exécuter (de préférence pas en tant que superutilisateur) chaque fois que la machine démarre, mais avant la connexion. Cela peut être la dernière chose à exécuter au démarrage. Je veux surtout que le script fonctionne même si aucun utilisateur ne se connecte.

Malabarba
la source
1
@bruce jetez un oeil à ceci -> askubuntu.com/questions/9382/…
hhlp
1
Vous pouvez utiliser upstart ou cron ou probablement tout un tas d'autres méthodes. Une chose importante à savoir est également la rapidité avec laquelle il peut fonctionner. Par exemple, a-t-il besoin d'un système de fichiers particulier pour être monté, a-t-il besoin que X soit en cours d'exécution, a-t-il besoin de DBus, a-t-il besoin d'un réseau - ou plus généralement: a-t-il besoin de ressources pour être présent?
janvier
@JanC: Oui, en fait, il a besoin de tout ce que vous avez demandé (à l'exception de X), c'est pourquoi je voudrais que ce soit la dernière chose à exécuter. Il n'y a vraiment aucune raison de l'exécuter plus tôt.
Malabarba
@hhlp: Cool, merci. Mais à quelle heure le script s'exécutera-t-il si j'utilise cette méthode? Comme je l'ai mentionné ci-dessus, il est préférable que ce soit l'une des toutes dernières choses (avant la connexion).
Malabarba
Eh bien, la connexion ne nécessite pas de mise en réseau, sauf si vous voulez vous connecter à un serveur Terminal Server et / ou que vous avez votre $ HOME sur un partage réseau ... ;-)
janvier

Réponses:

8

Je recommanderais d'utiliser cron. La valeur de temps spéciale de @rebootfera apparaître votre travail à chaque redémarrage en tant qu'utilisateur. Par exemple, exécutez crontab -eet utilisez:

@reboot /home/yourself/bin/some_script_to_run

Pour plus de détails sur les formats d'heure spéciaux, voir man 5 crontab

Kees Cook
la source
Merci, cela semble assez facile. Cela ne dépend pas de l'utilisateur qui crée le cronjob, n'est-ce pas? Il s'exécute à la fin du démarrage indépendamment des connexions?
Malabarba du
Cela dépend absolument de qui a créé le cronjob - il fonctionnera en tant qu'utilisateur. Mais cela ne dépend pas d'eux pour se connecter.
Kees Cook
Gardez à l'esprit que cela exécute le script lorsque le démon cron est démarré, il est donc possible que d'autres systèmes dont vous pourriez avoir besoin ne soient pas encore prêts.
PhoneixS
4

Une possibilité consiste à utiliser Upstart. Cela vous permet de spécifier quand vous souhaitez exécuter votre script en termes de dépendances, par exemple «lorsque les systèmes de fichiers sont montés et que l'interface réseau eth0est opérationnelle». Créez un fichier /etc/init/bruce_script.conf(vous devez créer le fichier en tant que root) contenant quelque chose comme ceci:

description "Bruce's boot script"
start on filesystem and net-device-up IFACE=eth0
task
exec su -c '/home/bruce/script' bruce

Consultez la documentation de démarrage pour plus d'informations, en particulier la init(5)page de manuel pour une liste de ce que vous pouvez mettre dans ce fichier de configuration.

Gilles 'SO- arrête d'être méchant'
la source
Existe-t-il une liste d'événements à venir pouvant être utilisés?
sunside
@Markus: pas que je sache. Les événements standard ont une page de manuel dans la section 7 (donc dpkg -L upstart |grep /man7/), et vous pouvez regarder les événements émis et utilisés comme déclencheurs dans les scripts existants dans /etc/init.
Gilles 'SO- arrête d'être méchant'