Il y a plusieurs années, nous pouvons écrire notre script de démarrage dans /etc/rc.local
. Une fois tous les services système chargés, votre script s'exécutera.
Maintenant, nous utilisons systemd, nous n'en avons rc.local
plus. Systemd démarre le service parallèle. Vous pouvez écrire votre propre service pour agir comme un rc.local` mais vous ne pouvez pas vous assurer qu'il fonctionnera après le chargement de tous les services système.
Y a-t-il un moyen de le faire? Ou nous devons utiliser Before
et After
dans le fichier de service systemd?
Réponses:
Dans systemd, il est conseillé d'utiliser
Before=
etAfter=
de bien commander vos services autour des autres.Mais puisque vous avez demandé un moyen sans utiliser
Before
etAfter
, vous pouvez utiliser:qui comme l'
man systemd.service
explique:la source
/proc/sys/kernel/modules_disabled
la1
fin du processus de démarrageCela dépend vraiment de votre définition de "démarré". Je suppose que vous voulez qu'il s'exécute immédiatement après le démarrage de getty. Pour ce faire, vous devez ajouter votre service au
/etc/systemd/system/getty.target.wants/
répertoire. Vous devez également vous assurer que votre fichier utilise un code similaire aux autres services de ce répertoire. Pour exécuter un service personnalisé au démarrage et à l'arrêt (émet simplement un bip sur le buzzer de ma carte mère), j'utilise le script suivant dans/etc/systemd/system/getty.target.wants/service_name.service
/usr/bin/myinitscript.sh
est exécutable et a un shebang au début.Notez que tout ne sera pas démarré à ce stade du démarrage, mais c'est le point auquel l'invite de connexion apparaît à l'utilisateur
Bien que cela utilise
Before=
etAfter=
, c'était pour moi beaucoup plus compréhensible et fonctionne réellement; Je n'ai pas trouvé la réponse ci-dessus suffisamment informative. Cela vous permet également d'utiliser les deuxExecStart=
etExecStop=
, plutôt que d'être limité à unType=simple
service similaire.la source
Je ne connais pas les détails ou ArchLinux, mais voici comment gérer systemd en général.
Eh bien, fondamentalement, systemd est une collection de scripts dans /etc/init.d/ qui sont pointés par des liens symboliques de /etc/rcX.d, où X est le nombre de niveaux d'exécution. Les liens symboliques eux-mêmes ont le format suivant:
où:
Donc, si vous souhaitez que votre script s'exécute en dernier dans la séquence de démarrage, vous devez procéder comme suit:
runlevel
ls /etc/rc<target runlevel>.d/
et choisissez un nombre à deux chiffres supérieur à tout autre déjà existant.update-rc.d
pour Debian ouchkconfig
pour Fedora ou manuellement, créez un lien symbolique /etc/rc.d/S vers votre script init.la source