Répartir les tâches du crontab unix
Lorsqu’on a beaucoup de tâches à planifier avec le cron unix, il devient ardu de calculer de tête la bonne heure pour planifier chaque job. Facile pour une ou deux tâches, quand on a des dizaines de jobs à lancer pour une journée, un bon départ est de les répartir uniformément. On pourra toujours réajuster par la suite selon leur durée, mais il nous faut bien avoir une bonne façon de calculer cette répartition.
Les deux fonctions qui suivent vont faire ce travail. En prime, la possibilité de répartir les tâches sur plusieurs jours, jusqu’à 30. On peut ainsi programmer un grand nombre de tâches réparties sur tout un mois.
On lance Repartir(<Nombre de Tâches>,<Nombre de jours>)
Par exemple, pour répartir 6 tâches dans une journée, on fait:
call Repartir(6,1)
Pour lancer 250 jobs à faire en un mois:
call Repartir(250,30)
On récupère ensuite le résultat dans “c:\tmp\crontab.txt” à compléter avec les commandes à lancer.
Le code:
Public Sub Repartir(nTaches, nJours)
Dim nMinutes As Long
Dim dIntervalle As Long
Dim Result As String
Dim i As Integer
Dim Time As Long
If nJours > 30 Then
MsgBox "Calcul sur 30 jours seulement", vbCritical
Exit Sub
End If
nMinutes = nJours * 24 * 60 ' Nombre de minutes de l'intervalle
dIntervalle = Int(nMinutes / nTaches) ' Duree de l'intervalle en minutes
Debug.Print "Durée de l'intervalle: " & dIntervalle & " minutes."
Open "c:\tmp\crontab.txt" For Output As 1
Time = 0
Print #1, CronTime(Time)
Debug.Print CronTime(Time)
For i = 1 To nTaches - 1
Time = Time + dIntervalle
If i < 20 Then
Debug.Print CronTime(Time)
Else
If i = 20 Then
Debug.Print "etc..."
End If
End If
Print #1, CronTime(Time)
Next i
Debug.Print ""
Close 1
End Sub
Public Function CronTime(Time)
Dim rHeures As Long
Dim rJours As Integer
Dim rMois As Integer
Dim sHeures As String
Dim sJours As String
Dim sMois As String
Dim nMinutes As Long
rHeures = 0
rJours = 0
rMois = 0
nMinutes = Time
While nMinutes >= 60
nMinutes = nMinutes - 60
rHeures = rHeures + 1
Wend
While rHeures >= 24
rHeures = rHeures - 24
rJours = rJours + 1
Wend
While rJours >= 30
rJours = rJours - 30
rMois = rMois + 1
Wend
sHeures = Str(rHeures)
sJours = Str(rJours)
If rJours = 0 Then sJours = "*" Else sJours = Str(rJours)
sMois = "*"
CronTime = nMinutes & " " & Trim(sHeures) & " " & Trim(sJours) & " " & Trim(sMois) & " *"
End Function

Posted by: admin on
Jan 24th, 2012 |
Filed under:
Be the first!
Tags: