Windows tiene varias alternativas para automatizar tareas. La herramienta más común es el Programador de tareas de Windows, pero si está usando el Subsistema de Windows para Linux (WSL), además existe el demonio cron que ejecuta tareas en segundo plano para su instalación de WSL.
Cron no se ejecuta de forma predeterminada
En Windows 10 y Windows 11, cron viene incluido con entornos Linux como Ubuntu. El problema es que WSL no inicia cron automáticamente, lo que significa que sus tareas automatizadas no se ejecutan de forma predeterminada.
Para arreglar este problema, puede iniciar cron manualmente cada vez que abra la línea de comando, pero iniciar manualmente una herramienta que se supone que automatiza las tareas es como perder el sentido.
Por suerte, hay una manera fácil de arreglar este problema y necesita el uso del Programador de tareas.
Si nunca ha usado cron en Linux para ejecutar tareas, consulte nuestro tutorial anterior acerca de cómo programar tareas en Linux. Para nuestros propósitos aquí, asumiremos que ya ha creado algunos trabajos cron en su instalación de WSL y que necesita ayuda para asegurarse de que se ejecuten en lugar de cuidar de cron todo el tiempo.
Para este tutorial, usaremos sudo service
para chequear e iniciar cron, que es la forma recomendada de detener e iniciar servicios en versiones modernas de Ubuntu, la distribución más popular para WSL.
Al mismo tiempo, tenga en cuenta que este tutorial asume que tiene derechos de administrador en su versión de WSL. Si es el único usuario de su PC y habilitó WSL por su cuenta, entonces tiene derechos de administrador.
Propina: Esto además funciona en el subsistema de Windows para Linux en Windows 11, no solo en Windows 10.
RELACIONADO: Cómo programar tareas en Linux: Introducción a los archivos Crontab
Preparar Linux
Lo primero que haremos es permitir que la computadora inicie cron sin contraseña. Cuando inicia un servicio como cron, utiliza el comando sudo service cron start
. Pero ese comando necesita una contraseña, a la que Windows no tendrá acceso cuando se inicie. La forma de evitar esto es desactivar el requisito de una contraseña para este comando.
Para hacer eso, abra la ventana de su terminal WSL y escriba sudo visudo
. Presione Enter en su teclado, ingrese su contraseña de Linux y presione la tecla Enter nuevamente. Si está usando Ubuntu, esto abre el archivo «sudoers» usando el editor de texto de línea de comandos Nano amistoso para principiantes. Sudoers es un archivo para administradores de sistemas que puede cambiar los privilegios y los derechos de acceso de los usuarios.
Agregue el siguiente comando al final del archivo sudoers y posteriormente presione Ctrl + o para guardar y Ctrl + x para salir del archivo.
%sudo ALL=NOPASSWD: /usr/sbin/service cron start
Este comando sudoers dice que cualquier usuario que tenga suficientes privilegios para utilizar el comando sudo (que debería incorporarlo a usted) no necesita una contraseña para ejecutar el comando sudo service cron start
, que inicia el demonio cron.
Una vez que haya guardado el archivo, puede verificar que el comando está haciendo su trabajo escribiendo sudo service cron start
, y debería iniciar cron sin pedir una contraseña. Si eso funcionó, apaguemos cron nuevamente para que podamos probar que la tarea que estamos creando en el siguiente paso funciona correctamente. Para hacer eso, por favor ejecute sudo service cron stop
.
Configurar Cron en el Programador de tareas de Windows
Esa es la etapa uno de nuestro viaje hacia la automatización cron. Pasemos a la parte 2 con el Programador de tareas. Toque la tecla de Windows en el teclado y posteriormente busque «Programador de tareas». Inicie el acceso directo del «Programador de tareas».
Cuando se inicie, busque en la sección «Acciones» y seleccione «Crear tarea básica».
Esto abre el Asistente para tareas básicas. Primero, le pedirá que nombre la tarea y le dé una descripción. Puedes ingresar lo que desees aquí. Llamamos a la tarea «cron» y la descripción es «Una tarea para iniciar cron al iniciar el sistema». Ahora, presione «Siguiente».
En la próxima sección, nos ponemos vamos a ello. Primero, Windows quiere saber cuándo queremos ejecutar la tarea. Elija el botón de opción «Cuando la computadora comience» y haga clic en «Siguiente».
En la próxima sección, queremos «Iniciar un programa». Esa opción está seleccionada de forma predeterminada, por lo tanto haga clic en «Siguiente».
Ahora, tenemos que especificar el programa que queremos ejecutar, que es WSL. Ingrese lo siguiente en el cuadro de entrada de texto «Programa / Script»: C:WindowsSystem32wsl.exe
Además necesitamos agregar algunos argumentos, puesto que todo lo que hemos hecho hasta ahora es iniciar WSL, pero dentro de WSL, necesitamos decirle a Ubuntu que inicie cron. Entonces, en el cuadro «Agregar argumentos», agregue: sudo /usr/sbin/service cron start
Presiona «Siguiente» una vez más, marca la casilla que dice «Abrir el cuadro de diálogo de propiedades cuando hago clic en Finalizar» y posteriormente haz un clic en «Finalizar».
La tarea está creada, pero tenemos que hacer una última cosa para asegurarnos de que todo funcione. Se abrirá una nueva ventana, que muestra el resumen de la tarea que creó, pero solo está configurada para ejecutarse cuando haya iniciado sesión. Necesitamos elegir el botón de radio que dice «Ejecutar si el usuario está conectado o no» y posteriormente presionar «Aceptar».
Ahora, probemos nuestra tarea de dos formas. Primero, en la ventana principal del Programador de tareas, desplácese hacia abajo hasta que vea el nombre de su tarea. Si usó el nombre «cron», debería encontrarse en la parte de arriba de la lista. Haga clic con el botón derecho en la tarea y seleccione «Ejecutar».
Posteriormente, regrese a su terminal WSL y escriba sudo service cron status
, y debería decir que cron se está ejecutando. Si no es así, verifique que haya ingresado todo correctamente en los pasos anteriores.
Si todo funcionó correctamente en la primera verificación, es hora de la gran prueba. Reinicie su PC y, cuando regrese, abra una terminal WSL y ejecute sudo service cron status
, que debería informar que cron ahora se está ejecutando.
¡Felicidades! Ha dado su primer paso hacia un mundo automatizado más grande. Con cron ejecutándose en segundo plano, los cronjobs que configure en WSL se ejecutarán automáticamente según lo programado.