Archives mensuelles : octobre 2019

Utiliser cron depuis WSL/Debian pour planifier des jobs Linux depuis Windows

Le but ?

Pouvoir utiliser certains outils Linux non disponibles sous Windows, qui ont besoin d’être planifiés régulièrement.
L’exemple qui me vient à l’esprit : utiliser borgbackup pour du backup (incrémental dédupliqué par blocs et compressé) de données d’un poste windows. Je trouve ça largement mieux que des unison/cygwin ou rsync etc. Ah oui, borgbackup n’est pas dispo simplement sous cygwin ni en binaire windows nativement.

A priori quand on lance la première fois un shell Debian via WSL, on est tout content d’avoir potentiellement tous les outils bien pratiques que l’on souhaite, mais rapidement on voit que cron ne tourne pas et que at non plus. Ca peut s’arranger.

Les étapes :

Planifiez vos jobs via crontab -e (je n’ai pas regardé si on peut utiliser /etc/crontab mais je méfie d’une histoire de droits entre Windows et Linux du fait du sudo).
Pour pouvoir démarrer le service cron depuis Windows automatiquement (c’est ça la principale ruse de cet article), on va placer dans le menu démarrer (enfin ce qu’il en reste dans un Windows 10, c’est ici : c:\Users\<votre_user>\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\) un racccourci Windows qui pointe vers : C:\Windows\System32\wsl.exe sudo /etc/init.d/cron start

Pour pouvoir lancer ce raccourci (une fois pour tester puis automatiquement au reboot), il faut qu’on puisse démarrer cron avec un utilisateur sans droit dans le WSL ; donc faire sauter la barrière du « sudo » pour lancer cron. Par exemple en ajoutant dans un fichier /etc/sudoers.d/cron_peu_importe_le_nom_lisez_le_README_dans_ce_repertoire qui contient : %sudo ALL=NOPASSWD: /etc/init.d/cron start. Et un chmod 0440 sur ce fichier.

Voilà, c’est tout, testez et c’est bon. Par exemple, vous vous créez une tâche toute bête style :
30 10 * * * touch /mnt/d/fichier_cron_depuis_wsl
Et tous les matins à 10h30, ce fichier est créé/mis à jour au niveau de la date de modif. A noter que /mnt/d est un répertoire monté par défaut dans WSL accédant au D: de votre Windows. Idem pour les autres disques – évidemment il faut avoir les droits en tant que <votre_user> pour écrire dans D:\ dans cet exemple.

Pour vérifier que cron tourne, allez dans la liste des process Windows et cherchez un « cron ». Si j’ouvre un shell WSL et que je tape /etc/init.d/cron status, ça me dit qu’il tourne pas o_O…