<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="es">
	<id>https://manuais.iessanclemente.net/index.php?action=history&amp;feed=atom&amp;title=Gesti%C3%B3n_de_timers</id>
	<title>Gestión de timers - Historial de revisiones</title>
	<link rel="self" type="application/atom+xml" href="https://manuais.iessanclemente.net/index.php?action=history&amp;feed=atom&amp;title=Gesti%C3%B3n_de_timers"/>
	<link rel="alternate" type="text/html" href="https://manuais.iessanclemente.net/index.php?title=Gesti%C3%B3n_de_timers&amp;action=history"/>
	<updated>2026-10-21T13:19:50Z</updated>
	<subtitle>Historial de revisiones de esta página en la wiki</subtitle>
	<generator>MediaWiki 1.46.2</generator>
	<entry>
		<id>https://manuais.iessanclemente.net/index.php?title=Gesti%C3%B3n_de_timers&amp;diff=63892&amp;oldid=prev</id>
		<title>Javierfp: /* Definiendo un service */</title>
		<link rel="alternate" type="text/html" href="https://manuais.iessanclemente.net/index.php?title=Gesti%C3%B3n_de_timers&amp;diff=63892&amp;oldid=prev"/>
		<updated>2018-01-23T16:02:47Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Definiendo un service&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Página nueva&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== Introducción ==&lt;br /&gt;
&lt;br /&gt;
Un aspecto fundamental a la hora de administrar un sistema GNU/Linux es la posibilidad de definir tareas programadas. Tradicionalmente para este cometido se ha usado la herramienta cron, la cual permite, de un modo simple y rápido, definir tareas periódicas.&lt;br /&gt;
&lt;br /&gt;
Systemd incorpora la posibilidad de gestionar este aspecto mediante los Unit de tipo timer. Como es habitual definiremos su correspondiente Unit File para definir el comportamiento del mismo.&lt;br /&gt;
&lt;br /&gt;
== Trabajando con timers ==&lt;br /&gt;
&lt;br /&gt;
A continuación mostraremos, con un ejemplo, la gestión básica de timers con systemd. El ejemplo consistirá en los siguientes pasos&lt;br /&gt;
&lt;br /&gt;
* Definiremos un &amp;#039;&amp;#039;&amp;#039;unit file de tipo timer, ejemplo-timer.timer, &amp;#039;&amp;#039;&amp;#039;que indicará un aspecto temporal en el que se llevará a cabo una acción en el sistema. El timer definido será incluído en el target &amp;#039;&amp;#039;&amp;#039;basic.target&amp;#039;&amp;#039;&amp;#039;, predefinido en systemd. Además, es necesario vincular el timer con la acción que se ejecutará por cada expiración del mismo. Para ello necesitaremos un unit de tipo target&lt;br /&gt;
* Definiremos el &amp;#039;&amp;#039;&amp;#039;unit de tipo target, ejemplo-timer-target,&amp;#039;&amp;#039;&amp;#039; al que se hace referencia arriba. Este target será necesario para vincular el timer con la acción definida a través de un unit de tipo service.&lt;br /&gt;
* Definiremos el unit de tipo service, &amp;#039;&amp;#039;&amp;#039;ejemplo-timer-service&amp;#039;&amp;#039;&amp;#039;, que definirá la acción ejecutada cada vez que se verifique la condición temporal definida en el timer.&lt;br /&gt;
&lt;br /&gt;
A continuación se muestra la relación entre los elementos que será necesario definir para habilitar el timer&lt;br /&gt;
&lt;br /&gt;
=== Definiendo el timer ===&lt;br /&gt;
&lt;br /&gt;
Para definir uno de estos objetos usaremos un unit file&lt;br /&gt;
&lt;br /&gt;
Creamos el unit file &amp;#039;&amp;#039;&amp;#039;/etc/systemd/system/ejemplo-timer.timer&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Timer de Prueba&lt;br /&gt;
[Timer]&lt;br /&gt;
OnBootSec=5min&lt;br /&gt;
OnCalendar=*:0/1&lt;br /&gt;
Unit=ejemplo-timer.target&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=basic.target&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dentro de la sección &amp;#039;&amp;#039;&amp;#039;Timer&amp;#039;&amp;#039;&amp;#039; es donde se definen los parámetros específicos&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;OnBootSec&amp;#039;&amp;#039;&amp;#039;: tiempo hasta la activación después de iniciar el sistema&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;OnCalendar&amp;#039;&amp;#039;&amp;#039;: define el instante temporal de activación del timer&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Unit&amp;#039;&amp;#039;&amp;#039;: Unit que se notifica por cada expiración del timer, en este caso una unit de tipo target que definiremos a continuación&lt;br /&gt;
&lt;br /&gt;
La sección &amp;#039;&amp;#039;&amp;#039;Install&amp;#039;&amp;#039;&amp;#039; establece parámetros a la hora de instalar o desplegar el timer &amp;#039;&amp;#039;&amp;#039;WantedBy=basic.target&amp;#039;&amp;#039;&amp;#039; indica el target al que irá asociado el timer. Este target está predefinido y, como su nombre indica, actúa como un contenedor de units a procesar en un perfil de ejecución básico. Por tanto, cuando se procese el target correspondiente, basic.target, se activará el timer.&lt;br /&gt;
&lt;br /&gt;
=== Definiendo un target ===&lt;br /&gt;
&lt;br /&gt;
Definimos el unit file para el target &amp;#039;&amp;#039;&amp;#039;/etc/systemd/system/ejemplo-timer.target&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Ejemplo Timer Target&lt;br /&gt;
StopWhenUnneeded=yes&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Definiendo un service ===&lt;br /&gt;
&lt;br /&gt;
Por último necesitamos una acción que se disparará asociada a los eventos de expiración del timer. Para ello crearemos un unit de tipo service a través del siguiente unit file &amp;#039;&amp;#039;&amp;#039;/etc/systemd/system/ejemplo-timer.service&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Escribe la fecha/hora cada minuto&lt;br /&gt;
Wants=ejemplo-timer.timer&lt;br /&gt;
[Service]&lt;br /&gt;
ExecStart=/bin/date&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=ejemplo-timer.target&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vemos como en la sección principal Unit se define la directiva&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Wants=ejemplo-timer.timer&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
que indica que esta unit dependerá del timer definido anteriormente, es decir, deberá ser procesado por systemd el unit correspondiente al timer para habilitar el service.&lt;br /&gt;
&lt;br /&gt;
En la sección &amp;#039;&amp;#039;&amp;#039;Service&amp;#039;&amp;#039;&amp;#039; vemos la acción, en este caso invocación al comando date, que imprimirá la fecha y hora en los archivos de log del journal&lt;br /&gt;
&lt;br /&gt;
Por último en la sección Install &amp;#039;&amp;#039;&amp;#039;WantedBy=ejemplo-timer.target &amp;#039;&amp;#039;&amp;#039;indica el target al que va asociado el service. De este modo conectamos el unit de tipo timer, definido al principio, con el service a través del unit de tipo target definido en el apartado anterior.&lt;br /&gt;
&lt;br /&gt;
=== Lanzamiento del timer ===&lt;br /&gt;
&lt;br /&gt;
A continuación ejecutamos los comando correspondientes para habilitar y activar el timer&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
systemctl enable ejemplo-timer.timer&lt;br /&gt;
systemctl start ejemplo-timer.timer&lt;br /&gt;
systemctl enable ejemplo-timer.service&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Los 3 comandos anteriores:&lt;br /&gt;
&lt;br /&gt;
* Habilita el timer para que se inicie en cada inicio del sistema&lt;br /&gt;
* Inicia el timer&lt;br /&gt;
* Habilita el service para que se inicie en cada inicio del sistema&lt;br /&gt;
&lt;br /&gt;
Para ver el resultado de la activación de la lógica del timer consultamos los logs con el comando&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;journalctl -f -u ejemplo-timer.service&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La salida mostrada en el log&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nov 27 18:20:08 base date[1077]: lun nov 27 18:20:08 CET 2017&lt;br /&gt;
nov 27 18:21:08 base systemd[1]: Started Escribe la fecha/hora cada minuto.&lt;br /&gt;
nov 27 18:21:08 base date[1079]: lun nov 27 18:21:08 CET 2017&lt;br /&gt;
nov 27 18:22:08 base systemd[1]: Started Escribe la fecha/hora cada minuto.&lt;br /&gt;
nov 27 18:22:08 base date[1082]: lun nov 27 18:22:08 CET 2017&lt;br /&gt;
nov 27 18:23:08 base systemd[1]: Started Escribe la fecha/hora cada minuto.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== NOTA ===&lt;br /&gt;
&lt;br /&gt;
Si bien en el ejemplo anterior hacemos uso de 3 units: timer, target y service; el uso del target no sería estrictamente necesario. Con el target podemos tomar control agrupando servicios bajo un mismo aspecto, sin embargo el ejemplo anterior funcionaría perfectamente definiendo timer y service del siguien modo:&lt;br /&gt;
&lt;br /&gt;
* El unit file del timer &amp;#039;&amp;#039;&amp;#039;/etc/systemd/system/ejemplo-timer.timer&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Timer de Prueba&lt;br /&gt;
[Timer]&lt;br /&gt;
OnBootSec=5min&lt;br /&gt;
OnCalendar=*:0/1&lt;br /&gt;
Unit=ejemplo-timer.service&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=basic.target&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* El unit file del service &amp;#039;&amp;#039;&amp;#039;/etc/systemd/system/ejemplo-timer.service&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Escribe la fecha/hora cada minuto&lt;br /&gt;
Wants=ejemplo-timer.timer&lt;br /&gt;
[Service]&lt;br /&gt;
ExecStart=/bin/date&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=basic.target&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Conclusión ===&lt;br /&gt;
&lt;br /&gt;
A priori no parece que se haya simplificado demasiado la gestión de este aspecto del sistema con systemd. El uso de la herramienta cron sigue siendo muy recomendable, dada su sencillez y su extendida utilización&lt;br /&gt;
&lt;br /&gt;
[[Gestión del Sistema con Systemd|Volver]]&lt;br /&gt;
&lt;br /&gt;
JavierFP 17:44 11 dec 2017 (CET)&lt;/div&gt;</summary>
		<author><name>Javierfp</name></author>
	</entry>
</feed>