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 [email protected]

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)
rubixibuc
fuente

Respuestas:

48

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

Por ejemplo, [email protected]es el servicio que proporciona terminales de inicio de sesión de texto. Cuando presiona Ctrl+ Alt+ F2, [email protected]se 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 [email protected]conectarse a él. Del mismo modo, podría crear /etc/openvpn/home.conf, luego comenzar [email protected]si 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/[email protected]con 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 [email protected]:

systemctl start [email protected]

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 [email protected]. 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.

Parches
fuente
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