44 votes

Le symbole @ et systemctl et vsftpd

J'ai une question en deux parties.

  1. Quelle est la signification du symbole @ dans les scripts systemctl?

  2. Comment démarrer vsftpd dans fedora 16, (qui dans certains tutoriels semble contenir un @ dans son nom)? J'ai fait tout ce que disent les tutoriels, et cela me donne toujours une erreur. http://blog.tuxforge.com/fedora-16-vsftpd/

Ce que j'ai fait

systemctl enable vsftpd@.service

Ce que je vois

Échec de l'appel de la méthode : Aucun fichier ou répertoire de ce type

(J'ai essayé ceci avec un chemin absolu également, et après avoir vérifié, il n'y a pas de tel fichier. Le vrai fichier ne contient pas de signe @, et est situé sous le répertoire /lib/systemd/system/. J'ai également essayé de démarrer et d'activer avec et sans le symbole @, l'activation fonctionne, mais le démarrage ne fonctionne pas. Je sais que l'article est maintenant obsolète, mais je n'arrive toujours pas à démarrer le service. Lorsque j'essaie de me connecter, il ne me le permet pas)

MODIFICATION : J'ai réussi à démarrer le service d'une manière ou d'une autre, mais j'aimerais toujours savoir ce que signifie le symbole @ dans certains noms de service. De plus, je reçois toujours une erreur de connexion numéro #500 ne peut pas changer de répertoire [...], que signifie cela?

Pour le démarrer, j'ai simplement tapé

sudo systemctl enable vsftpd.service

sudo systemctl start vsftpd.service (le problème était que j'utilisais un chemin absolu pour cela je crois)

78voto

phlatfish Points 1

Le symbole @ est réservé aux services spéciaux, aux sockets et autres unités où plusieurs instances peuvent être exécutées.

Par exemple, le service getty@.service fournit des terminaux de connexion texte. Lorsque vous appuyez sur Ctrl+Alt+F2, le service getty@tty2.service est lancé, créant le terminal virtuel n°2.

Un autre service utilisant cette fonctionnalité est OpenVPN. Vous pouvez créer un fichier /etc/openvpn/work.conf, configuré pour se connecter au VPN de votre lieu de travail, puis exécuter systemctl start openvpn@work.service pour vous y connecter. De même, vous pourriez créer /etc/openvpn/home.conf, puis démarrer openvpn@home.service si vous avez un VPN à la maison. Cela vous évite d'avoir à créer un fichier .service pour chaque VPN auquel vous vous connectez.

Mais ne me croyez pas sur parole. Essayez par vous-même ! Créez un service simple qui envoie un message vers le syslog. Créez un fichier /etc/systemd/system/echo@.service avec le contenu suivant :

[Unit]
Description=Echo '%I'

[Service]
Type=oneshot
ExecStart=/bin/echo %i
StandardOutput=syslog

Remarquez le %i ? systemd le remplira avec tout ce qui suit le signe @ lorsque le service sera lancé. Alors, essayez de démarrer echo@foo.service :

systemctl start echo@foo.service

Ensuite, vérifiez le journal :

 journalctl -n10

En bas, vous verrez que systemd a exécuté /bin/echo foo :

Feb 24 12:41:01 localhost echo[8412]: foo

Maintenant, essayez systemctl start echo@bar.service. Cette fois, systemd remplira %i avec bar, donc vous verrez :

Feb 24 12:42:51 localhost echo[8432]: bar

C'est tout ce qu'il y a à faire ! N'importe quoi pourrait potentiellement suivre le signe @, car systemd remplace simplement %i dans la définition du service par cette valeur. OpenVPN l'utilise pour la configuration, d'autres services pourraient l'utiliser pour autre chose, comme un numéro de port.

Pour plus d'informations, consultez man systemd.unit.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X