
Estoy en Arch Linux y estoy intentando realizar un trabajo cron que se active cada minuto. Entonces uso:
$ crontab -e
Y agregue el script en:
* * * * * Rscript /srv/shiny-system/cron/CPU.R
~
~
"/tmp/crontab.8VZ7vq" 1 line, 47 characters
(¡No tengo idea de qué es ese "/tmp/crontab.8VZ7vq"!)
Pero no funciona: CPU.R no se ejecuta cada minuto. ¿Qué debo hacer entonces en Arch Linux para ejecutar el trabajo cron? He mirado estas guías wiki a continuación pero todavía estoy perdido:
Editar
Encontré algunas pistas deaquíacerca de crond
.
[xxx@localhost ~]$ systemctl status crond
● crond.service
Loaded: not-found (Reason: No such file or directory)
Active: inactive (dead)
[xxx@localhost ~]$ sudo systemctl start crond
[sudo] password for xxx:
Failed to start crond.service: Unit crond.service failed to load: No such file or directory.
¿Qué quiere decir esto?Dónde¿Debería poner este crond.service yquéscript debería ponerle?
Respuesta1
No haycrond.servicioen ArchLinux. Como deja perfectamente claro Arch Wiki:
Hay muchas implementaciones de cron, pero ninguna de ellas está instalada de forma predeterminada ya que el sistema base usa systemd/Timers.
En consecuencia, si desea utilizar cron, debeelegircuál de las muchas implementaciones instalará y luego iniciará ese servicio específico.
No se escribe al azar systemctl enable nonexistent.service
y luego se pregunta por qué no se está ejecutando...
Si quieres cronie, instala cronie y comienza con:
pacman -Syu cronie
systemctl enable --now cronie.service
La documentación de Arch es en general muy clara; Si lees las páginas a las que vinculaste con más atención, deberías descubrir lo que necesitas.
Respuesta2
Si te entiendo bien, te refieres a...
Cómo ejecutar un trabajo 'cron'
...eventos programados en arch Linux. Es bastante sencillo usar systemd/Timers como reemplazo de cron.
Aunque podría decirse que cron es el programador de trabajos más conocido, los temporizadores systemd pueden ser una alternativa.
Beneficios
Los principales beneficios de usar temporizadores provienen de que cada trabajo tiene su propio servicio systemd. Algunos de estos beneficios son:
- Los trabajos se pueden iniciar fácilmente independientemente de sus temporizadores. Esto simplifica la depuración.
- Cada trabajo se puede configurar para ejecutarse en un entorno específico (consulte systemd.exec(5)).
- Los trabajos se pueden adjuntar a cgroups.
- Los trabajos se pueden configurar para que dependan de otras unidades systemd.
- Los trabajos se registran en el diario de systemd para facilitar la depuración.
...como se mencionóaquí
Si tiene que usar cron, todavía es posible y se describeaquí.
Para que esta respuesta sea útil, un ejemplo mínimo para unreinicio automático programado diarioa las 01:30.
1. Cree dos archivos, un archivo de servicio y un archivo de temporizador.Ambos nombres (.timer y .service) deben coincidir. Fe:
sudo vim /usr/lib/systemd/system/scheduledReboot.service
sudo vim /usr/lib/systemd/system/scheduledReboot.timer
(La carpeta /usr/lib/systemd/system/... es la carpeta predeterminada que contiene todos los archivos .service, solo para su información)
2.1 El archivo programadoReboot.service contiene:
[Unit]
Description=Scheduled Reboot
[Service]
Type=simple
ExecStart=/usr/bin/systemctl --force reboot
2.2 El archivo programadoReboot.timer contiene:
[Unit]
Description=Reboot Scheduling.
[Timer]
OnCalendar=*-*-* 01:30:00
[Install]
WantedBy=multi-user.target
- Y finalmente comenzar los trabajos:
sudo systemctl start scheduledReboot.timer
sudo systemctl enable scheduledReboot.timer
- Compruebe si el trabajo se creó correctamente:
sudo systemctl list-timers --all
y/o
sudo systemctl status scheduledReboot.timer
..eso muestra cosas como:
Trigger: Sun 2020-05-31 01:30:00 EDT; 10h left
Personalmente, me gusta mucho el enfoque systemd/.service ya que uso todos los trabajos de mi sistema con systemctl, como el montaje automático de mis unidades nfs, etc., y funciona muy bien y es eficiente.
Respuesta3
mi
crea un archivo con tu tarea de crone, etc. cron.txt
cat cron.txt 0 1 * * * systemctl detener iradio; apagado -P 0 30 23 * * * systemctl detener reloj 34 23 * * * systemctl iniciar reloj
luego crontab el nuevo archivo
crontab cron.txt
Parece estar funcionando ahora.