OK, j'ai donc un problème simple: j'ai un CD live et je veux que le CD soit éjecté lorsque l'ordinateur est redémarré ou arrêté.
L'exécution /usr/bin/eject -m
rend le CD éjecté très bien ... le problème est, comme vous vous en doutez, cela bloque alors le système d'exploitation car il ne peut plus lire aucun fichier. Le redémarrage ne se produit donc jamais, car il /sbin/reboot
est inaccessible. (J'ai essayé de l'exécuter reboot --help > /dev/null
juste avant le redémarrage, mais il y a encore d'autres fichiers qui ne peuvent toujours pas être lus ...)
En résumé, il semble que je doive faire de l'éjection la toute dernière chose qui se produise. Il semble donc que systemd
c'est le chiot avec lequel je dois jouer ... Mais j'ai gaspillé littéralement des heures de ma vie à le piquer et à le pousser, et peu importe ce que je fais, il n'éjecte jamais, en aucune circonstance, le CD. Et je ne sais pas pourquoi. J'ai essayé une douzaine de façons différentes d'invoquer eject
, mais rien ne se passe jamais.
Quelqu'un peut-il me dire la façon la plus simple de courir eject
? (J'imagine que juste après umount.target
serait raisonnable ...)
eject
, ça irait?Réponses:
Finalement, mon collègue a trouvé l'article suivant:
http://lists.freedesktop.org/archives/systemd-devel/2012-September/006573.html
En résumé, j'ai créé un fichier nommé
/lib/systemd/system/eject.service
qui contientJ'ai aussi dû courir
systemctl enable eject.service
pour que ça fasse quoi que ce soit. Maissystemd
éjecte maintenant le CD juste avant l'arrêt, exactement comme je le voulais.... malheureusement, le système d'exploitation se sépare toujours lorsqu'il ne trouve pas le reste des fichiers avec le CD éjecté. J'ai essayé d'ajuster le fichier ci-dessus pour que nous en ayons
After=unmount.target
, ce qui, selon vous, exécute le script après le démontage des systèmes de fichiers. Mais non, il se sépare toujours.Il semblerait que je vais devoir trouver comment copier l'image live du CD dans la RAM au démarrage - mais c'est une toute autre question ...
la source
Les éléments suivants peuvent vous aider:
Ajoutez votre commande d'éjection à /etc/init.d/halt.local
Vous pouvez également consulter le modèle /etc/init.d/skeleton et le personnaliser pour peut-être ajouter une sortie, par exemple l'arrêt du système, appuyez sur n'importe quelle touche pour éjecter le cdrom, etc.
Consultez les scripts dans /etc/init.d qui sont liés dans les répertoires de niveau d'exécution /etc/rc0.d (arrêt).
la source
Découvrez les scripts dans
/etc/init.d
lesquels sont liés dans les répertoires de niveau d'exécution/etc/rc0.d
(arrêt) et/etc/rc6.d
(redémarrage). Par exemple, j'ai mis la commande d'éjection/etc/init.d/reboot
et cela a bien fonctionné.Mais, je ne suis pas sur un Live CD donc je ne peux pas tester ce qui fonctionnerait.
Si vous y pensez, quelque chose comme ça, il est difficile d'imaginer, mettre un script ou même un binaire compilé. Même un binaire nécessite une surcharge d'allocation / désallocation, et dès que vous éjectez le CD, vous avez terminé. Au contraire, cela devrait être comme un drapeau et un pointeur vers une instruction machine, stocké dans une mémoire super persistante ...
Il est peut-être plus facile d'exécuter simplement la commande et de planter délibérément le système d'exploitation, mais pour ce faire, lorsque presque toutes les choses sont hors ligne, il importe peu que vous plantiez votre système restant.
(Modifier) Une autre pensée: pourriez-vous en quelque sorte partitionner votre système de fichiers, créer une partition pour la commande d'éjection et redémarrer, démonter toutes les autres, puis exécuter la commande? (Mais, probablement alors il faudrait dire à fsck de ne pas se plaindre à chaque fois, que la partition d'éjection n'a pas été démontée correctement.) Ou, pourriez-vous la mettre sur une clé USB? (C'est un problème très intéressant; si vous le résolvez, dites-le nous!)
(Edit 2) Qu'en est-il de la fusion de l' éjection et du redémarrage, de sorte que vous obtenez un binaire, il est chargé en mémoire, éjecte le CD, mais n'a pas à charger le redémarrage à partir d'un système de fichiers, il est déjà dans la mémoire principale?
la source
ubuntu peut utiliser
eject -m; reboot -f
la source