El símbolo @ y systemctl y vsftpd


27

Tengo una pregunta de dos partes.

  1. ¿Cuál es el significado del símbolo @ en los scripts systemctl?

  2. ¿Cómo iniciar vsftpd en fedora 16 (que en algunos tutoriales parece contener una @ en su nombre)? He hecho todo lo que dicen los tutoriales, y todavía me da un error. http://blog.tuxforge.com/fedora-16-vsftpd/

Qué he hecho

systemctl enable vsftpd@.service

Lo que veo

Failed to issue method call: No such file or directory

(También he intentado esto con una ruta absoluta, y después de comprobarlo no existe dicho archivo. El archivo real no contiene un signo @, y se encuentra en el directorio / lib / systemd / system /. También he intentado iniciar y habilitar con y sin el símbolo @, habilitar funciona, pero comenzar no. Me doy cuenta de que el artículo ahora está obsoleto, pero parece que todavía no puedo iniciar el servicio. Cuando intento conectarlo, no me deja)

EDITAR: Obtuve el servicio para comenzar de alguna manera, pero todavía me gustaría saber qué significa el símbolo @ en algunos nombres de servicio. Además, sigo recibiendo un número de error de inicio de sesión # 500 que no puede cambiar el directorio, [...] ¿qué significa esto?

Para comenzar, simplemente escribí

sudo systemctl enable vsftpd.service

sudo systemctl start vsftpd.service (the problem was I was using an absolute path for this I think)

Respuestas:


48

El @símbolo es para servicios especiales, sockets y otras unidades donde se pueden ejecutar varias instancias.

Por ejemplo, getty@.servicees el servicio que proporciona terminales de inicio de sesión de texto. Cuando presiona Ctrl+ Alt+ F2, getty@tty2.servicese inicia, creando la terminal virtual # 2.

Otro servicio que utiliza esta funcionalidad es OpenVPN. Puede crear un archivo /etc/openvpn/work.conf, configurado para conectarse a la VPN en su lugar de trabajo y luego systemctl start openvpn@work.serviceconectarse a él. Del mismo modo, podría crear /etc/openvpn/home.conf, luego comenzar openvpn@home.servicesi tenía una VPN en casa. Esto evita que tenga que crear un .servicearchivo para cada VPN a la que se conecte.

Pero no confíes en mi palabra. ¡Pruébalo! Creemos un servicio simple que envíe un mensaje a syslog. Cree un archivo /etc/systemd/system/echo@.servicecon los siguientes contenidos:

[Unit]
Description=Echo '%I'

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

Observe el %i? systemd completará eso con lo que sigue al @signo cuando se inicia el servicio. Entonces, intente comenzar echo@foo.service:

systemctl start echo@foo.service

Luego, revise el diario :

 journalctl -n10

En la parte inferior, verá que systemd se ejecutó /bin/echo foo:

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

Ahora inténtalo systemctl start echo@bar.service. Esta vez, systemd se completará %icon bar, por lo que verá:

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

¡Eso es todo al respecto! Cualquier cosa podría seguir el @signo, ya que systemd simplemente reemplaza %ien la definición del servicio con él. OpenVPN lo usa para la configuración, otros servicios podrían usarlo para otra cosa, como un número de puerto.

Para más información, ver man systemd.unit.


1
¿Se inician y se detienen como servicios normales, excepto por la inclusión del símbolo @? Por ejemplo, si tuviera que iniciar el servicio por segunda vez, ¿volvería a comenzar? ¿Cómo iniciar múltiples instancias?
rubixibuc

Sí, solo cambia el texto que sigue al @signo a lo que sea apropiado. Agregué un ejemplo que puedes probar para ver cómo funciona.
Parches

@Patches: ¿Dónde está un documento para "El símbolo @ es para servicios especiales donde se pueden ejecutar varias instancias"? No lo veo en freedesktop.org/software/systemd/man/systemd.service.html
pevik

Se describe en systemd.unit . También es útil para enchufes y otros tipos de unidades. (Agregado para responder ahora, gracias. :-)
Parches del
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.