Página 1 de 1

Re: CRON programador de tareas

Publicado: 02 Feb 2009, 03:07
por Pablo2m
Hola Esgrimidor, dado que el autor no da señales de vida lo he subido a mi cuenta en Adrive:
http://www.adrive.com/public/a415913781 ... db706.html
He puesto dos versiones compiladas (en 32 y 64 bits), las fuentes y el arhivo crontab. Cualquier duda avisame.
Saludos :smt039
Pablo

Re: CRON programador de tareas

Publicado: 02 Feb 2009, 04:14
por Esgrimidor
Gracias pablo

Re: CRON programador de tareas

Publicado: 02 Feb 2009, 04:18
por Esgrimidor
El exe da error

Imagen
By Esgrimidor

Re: CRON programador de tareas

Publicado: 02 Feb 2009, 14:04
por Pablo2m
Ya lo estoy solucionando, ¿sabes lo que paso? : compile la version original, la que posee la linea que mas arriba comento que no se que hace pero con ella no me anda. Ahora estoy revisando si pasa alguna otra cosa rara. Cuando este seguro lo subo de nuevo.
Si quieres ir probando ponle un punto y coma a la linea que dice "Opt("RunErrorsFatal", 0)"
Saludos
Pablo

Re: CRON programador de tareas

Publicado: 02 Feb 2009, 15:08
por Esgrimidor
Te espero mejor.

Re: CRON programador de tareas

Publicado: 02 Feb 2009, 16:11
por Chefito
Según creo recordar, leí que la opción RunErrorsFatal la quitaron, que estaba en versiones anteriores.
Asi que eliminarla, porque en estas versiones no existe.

Saludos :smt026 .

Re: CRON programador de tareas

Publicado: 02 Feb 2009, 20:59
por Pablo2m
¿Para que servia esta opcion?, el programa anda bien sin ella asi que no se me ocurre que haria metida ahi.
Saludos
Pablo

Re: CRON programador de tareas

Publicado: 02 Feb 2009, 21:53
por Chefito
Mejor que yo, te pondré lo que pone la ayuda traducida al español de la versión 3.0.102 del AutoIt:
Fija si el script terminaría con un error fatal si una función Run/RunWait falla debido a dirección errónea/archivo no encontrado/Mal entrada de IDs:
1 = Error fatal (por defecto)
0 = Error silencioso (@error es fijado a 1)
Espero que te haya aclarado la duda. Pero olvidate de esto que ya no existe :smt002 . Ahora habría que tratar el error con el resultado que daría la función Run/RunWait a la macro @error.

Saludos.

Re: CRON programador de tareas

Publicado: 05 Feb 2010, 12:28
por gna08
che alguien k tenga este script lo podra resubir si es tan amable :O :smt022 :smt022 xq no sirve ningun link del tiempo k lleva inactivo :smt021

Saludos :smt007

Re: CRON programador de tareas

Publicado: 26 Mar 2010, 02:34
por Pablo2m
Hola, llevaba algun tiempo sin conectarme.

Te pongo los codigos corregidos (creo), no es problema compilarlo :smt024

Código: Seleccionar todo

#NoTrayIcon
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_outfile=Cron 64 bits.exe
#AutoIt3Wrapper_UseUpx=n
#AutoIt3Wrapper_UseX64=y
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****

#cs
   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   Juan Luis Rodríguez González
   CRON 0.2.1.11
   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   ¿Qué es Cron?
   -------------
   Cron (el nombre es una reliquia UNIX) es un proceso que se inicia cuando
   su máquina arranca y nunca se detiene hasta que se apaga. Durante su
   existencia, comprueba los contenidos de cierto fichero cada minuto (puede
   cambiar fácilmente la granularidad del tiempo, por ejemplo a 5 minutos). Si
   encuentra que la hora y fecha actuales coinciden con una entrada en el
   fichero, Cron inicia el proceso mencionado en el fichero.
   
   Esto suena aburrido, pero en la práctica, Cron es la herramienta más útil de
   planificar tareas repetitivas que he encontrado nunca.
   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   
   El fichero CRONTAB.TXT
   
   m h d m s comando [|| parametros]
   m = minutos 0 a 59
   h = horas 0 a 59
   d = dia del mes 1 a 31
   m = nº de mes 1 a 12
   s = nº semana 1 = Lunes 7y0= Domingo
   comando = lo que quieras que se ejecute
   parametros
   
   $minuto $hora $dia_mes $mes $dia_semana Comando [|| parametros]
   
   Hay dos comodines:
   * significa que se cumple siempre
   I que se cumple cuando coincide con la ejecución de CRON
   / indica el incremento (solo se puede usar una vez por linea)
   
   Añadido comandos internos
   :kill <proceso> cierra el proceso                     ej:  :kill iexplore.exe   cierra el intene explores
   :off Apaga el ordenador
   :exit cierra cron
   :reboot reinicia el ordenador
   :beep <frecuencia> <duración en milesimas de segundo>   ej:  :beep 500 1000
   :play <nombre de archivo de sonido>                  ej:  :play c:\windows\media\tada.wav
   () titulo () texto ;mensaje emerjente                 ej:  () Alerta () Este es un mensaje de prueva||Esta es otra linea
   
   Añadigo multiples, rango y balor de incremento
   
   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   opciones aun no soportadas
   coma para valore multibles ej: 1,2 * * * * comando
   y guión para rangos ej:   2-5 * * * * comando
   añadir más comandos internos
   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#ce

;Opt("RunErrorsFatal", 0)


;--------- Archivo de registro ------------
$fileReg = FileOpen("reg.log", 1)
If $fileReg = -1 Then
   MsgBox(0, "Error", "No se puede abrir archivo.")
EndIf
FileWriteLine($fileReg, "")
FileWriteLine($fileReg, "Comienzo de Cron ( " & @HOUR & ":" & @MIN & " " & @MDAY & " de " & @MON & " de " & @YEAR & " )")
FileWriteLine($fileReg, "-------------------------------------------")
FileClose($fileReg)
;----------------------------------------
$segundos = 0
$y = 0
Dim $subcom[6]
$subcom[0] = 0
$subcom[1] = 0
$subcom[2] = 0
$subcom[3] = 0
$subcom[4] = 0
$subcom[5] = 0

;--------- Variables para el comodin (I)------------
$Iminutos = Number(@MIN)
$Ihoras = Number(@HOUR)
$Imes = Number(@MON)
$Idia_mes = Number(@MDAY)
$Idia_semana = Number(@WDAY) - 1
;--------------------------------------------------

;--------- Bucle principal de la aplicación-------------
While 1
   Dim $par[6]
   $minutos = Number(@MIN)
   $par[1] = Number(@MIN)
   $horas = Number(@HOUR)
   $par[2] = Number(@HOUR)
   $mes = Number(@MON)
   $par[3] = Number(@MON)
   $dia_mes = Number(@MDAY)
   $par[4] = Number(@MDAY)
   $dia_semana = Number(@WDAY) - 1
   $par[5] = Number(@WDAY)
   $espera = 60000
   abrir() ; abrir y ejecutar fichero CRONTAB.TXT
   ;------------- reaguste de tiempos ------------
   $segundos = (@SEC) * 1000
   ;If 0 < @SEC Then
   ;   $segundos = (@SEC) * 1000
   ;EndIf
   $espera = $espera - $segundos
   ;----------------------------------------------
   Sleep($espera); pausa 60 segundos 1 minuto
WEnd

;--------- abrir y ejecutar fichero CRONTAB -----------
Func abrir()
   $file = FileOpen(".CRONTAB", 0);Lo intenta con la extensión CRONTAB
   ; Revisa si el archivo está listo para abrir
   If $file = -1 Then
      $file = FileOpen("CRONTAB", 0);Lo intenta sin la extensión TXT
      If $file = -1 Then
         $file = FileOpen("CRONTAB.txt", 0);Lo intenta con la extensión TXT
         If $file = -1 Then
            MsgBox(0, "Error", "Archivo CRONTAB no se pudo abrir.")
            Exit; Sale de la aplicación
         EndIf
      EndIf
   EndIf

   ; Lee líneas de texto hasta que aparece EOF (End Of File= Fin de Archivo)
   While 1
      $line = FileReadLine($file)
      If @error = -1 Then ExitLoop
      $primero = StringMid($line, 1, 1);saca el primer caracter para comprobar comentarios
      ;compara el primer carancter si es un numero o comodin pasa a FunRum
      If StringIsDigit($primero) Or StringInStr($primero, "*") Or StringInStr($primero, "I") Or StringInStr($primero, "i") = 1 Then
         FunRum($line)
      EndIf
   WEnd
   $subcom[0] = 0
   FileClose($file)
EndFunc   ;==>abrir


Func FunRum($line)
   
   $line = StringStripWS($line, 4);Reduce espacios
   ;divide linea $parametros[1]=$minuto $parametros[2]=$hora $parametros[3]=$dia_mes $parametros[4]=$mes $parametros[5]=$dia_semana $parametros[6..]=comando
   $parametros = StringSplit($line, " ")
   ;---------- Proceso del comodin (I) -----------------
   If $parametros[1] = "I" Or $parametros[1] = "i" Then
      $parametros[1] = $Iminutos
   EndIf
   If $parametros[2] = "I" Or $parametros[2] = "i" Then
      $parametros[2] = $Ihoras
   EndIf
   If $parametros[3] = "I" Or $parametros[3] = "i" Then
      $parametros[3] = $Idia_mes
   EndIf
   If $parametros[4] = "I" Or $parametros[4] = "i" Then
      $parametros[4] = $Imes
   EndIf
   If $parametros[5] = "I" Or $parametros[5] = "i" Then
      $parametros[5] = $Idia_semana
   EndIf
   If Number($parametros[5]) = 0 And StringMid($parametros[5], 1, 1) <> "*" Then
      $parametros[5] = 7
   EndIf
   If $dia_semana = 0 Then
      $dia_semana = 7
   EndIf
   If $par[5] = 0 Then
      $par[5] = 7
   EndIf
   ;---------------------------------------------------
   Dim $multiples[6]
   Dim $rango[6]
   $subcom[0] = 0
   $subcom[1] = 0
   $subcom[2] = 0
   $subcom[3] = 0
   $subcom[4] = 0
   $subcom[5] = 0
   For $p = 1 To 5
      If StringInStr($parametros[$p], ",") Then
         ;multiples
         $mul = StringSplit($parametros[$p], ",")
         For $p2 = 1 To $mul[0]
            ;
            If Number($mul[$p2]) = $par[$p] Then
               $multiples[$p] = 1
            EndIf
         Next
      Else
         If StringInStr($parametros[$p], "-") Then
            ;rango
            $ran = StringSplit($parametros[$p], "-")
            If Number($ran[1]) >= $par[$p] And Number($ran[2]) <= $par[$p] Then
               $rango[$p] = 1
            EndIf
         EndIf
      EndIf
      
      ;---------------------- Incremento -----------------------
      If StringInStr($parametros[$p], "/") > 0 Then ;1
         $ss = StringSplit($parametros[$p], "/")
         If $minutos = 0 Then
            $minutos = 60
         EndIf
         If $par[1] = 0 Then
            $par[1] = 60
         EndIf
         If Number($horas) = 0 Then
            $horas = 24
         EndIf
         If $par[2] = 0 Then
            $par[1] = 24
         EndIf
         If Mod($par[$p], Number($ss[2])) = 0 Then
            $subcom[$p] = 0
         Else
            $subcom[$p] = 1
         EndIf
         If $minutos = 60 Then
            $minutos = 0
         EndIf
         If $par[1] = 60 Then
            $par[1] = 0
         EndIf
         If $horas = 24 Then
            $horas = 0
         EndIf
         If $par[2] = 24 Then
            $par[2] = 0
         EndIf
         
      Else
         $subcom[$p] = 0
      EndIf
      ;----------------------------------------------------------
      ;---------------------------------------------------------
   Next
   ;---------- Comprobaciones -------------------------
   If (Number($parametros[1]) = $minutos Or StringMid($parametros[1], 1, 1) = "*" Or $multiples[1] Or $rango[1]) And $subcom[1] = 0 Then
      If (Number($parametros[2]) = $horas Or StringMid($parametros[2], 1, 1) = "*" Or $multiples[2] Or $rango[2]) And $subcom[2] = 0 Then
         If (Number($parametros[3]) = $dia_mes Or StringMid($parametros[3], 1, 1) = "*" Or $multiples[3] Or $rango[3]) And $subcom[3] = 0 Then
            If (Number($parametros[4]) = $mes Or StringMid($parametros[4], 1, 1) = "*" Or $multiples[4] Or $rango[4]) And $subcom[4] = 0 Then
               If (Number($parametros[5]) = $dia_semana Or StringMid($parametros[5], 1, 1) = "*" Or $multiples[5] Or $rango[5]) And $subcom[5] = 0 Then
                  ;ejecuta la expresión
                  correcto($parametros)
               EndIf
            EndIf
         EndIf
      EndIf
   EndIf
   $multiples = 0
   $rango = 0
EndFunc   ;==>FunRum

;----------------- todo correcto -----------------
Func correcto($parametros)
   ;------------------------------------------------
   ;- :kill <aplicación>
   ;- :off Apaga el ordenador
   ;- :exit cierra cron
   ;- :reboot reinicia el ordenador
   ;- ()titulo()texto ;mensaje emerjente
   ;------------------------------------------------
   $parametros[6] = StringUpper($parametros[6])
   Select
      Case $parametros[6] = "()"
         comando_interno($parametros)
      Case $parametros[6] = ":kill"
         $comando = $parametros[7]
         $x = 8
         While $x < UBound($parametros)
            $comando = $comando & " " & $parametros[$x]
            $x = $x + 1
         WEnd
         $fileReg = FileOpen("reg.log", 1)
         If $fileReg = -1 Then
            MsgBox(0, "Error", "No se puede abrir archivo.")
         EndIf
         FileWriteLine($fileReg, @HOUR & ":" & @MIN & " " & @MDAY & " de " & @MON & " de " & @YEAR & " | kill | " & $comando)
         FileClose($fileReg)
         While ProcessExists($comando)
            ;
            ProcessClose($comando);------------------ cierra $comando
         WEnd
      Case $parametros[6] = ":off"
         $fileReg = FileOpen("reg.log", 1)
         If $fileReg = -1 Then
            MsgBox(0, "Error", "No se puede abrir archivo.")
         EndIf
         FileWriteLine($fileReg, @HOUR & ":" & @MIN & " " & @MDAY & " de " & @MON & " de " & @YEAR & " | off")
         FileClose($fileReg)
         Shutdown(13);---------------- cierra y apaga
      Case $parametros[6] = ":reboot"
         $fileReg = FileOpen("reg.log", 1)
         If $fileReg = -1 Then
            MsgBox(0, "Error", "No se puede abrir archivo.")
         EndIf
         FileWriteLine($fileReg, @HOUR & ":" & @MIN & " " & @MDAY & " de " & @MON & " de " & @YEAR & " | reboot")
         FileClose($fileReg)
         Shutdown(6);------------------ reinicia
      Case $parametros[6] = ":exit"
         $fileReg = FileOpen("reg.log", 1)
         If $fileReg = -1 Then
            MsgBox(0, "Error", "No se puede abrir archivo.")
         EndIf
         FileWriteLine($fileReg, @HOUR & ":" & @MIN & " " & @MDAY & " de " & @MON & " de " & @YEAR & " | Exit")
         FileClose($fileReg)
         While ProcessExists(@ScriptName)
            ;--------------------------- Cierra procesos CRON
            ProcessClose(@ScriptName)
         WEnd
      Case $parametros[6] = ":beep"
         $fileReg = FileOpen("reg.log", 1)
         If $fileReg = -1 Then
            MsgBox(0, "Error", "No se puede abrir archivo.")
         EndIf
         FileWriteLine($fileReg, @HOUR & ":" & @MIN & " " & @MDAY & " de " & @MON & " de " & @YEAR & " | beep " & $parametros[7] & " " & $parametros[8])
         FileClose($fileReg)
         Beep($parametros[7], $parametros[8])
      Case $parametros[6] = ":play"
         $comando = $parametros[7]
         $x = 8
         While $x < UBound($parametros)
            $comando = $comando & " " & $parametros[$x]
            $x = $x + 1
         WEnd
         $fileReg = FileOpen("reg.log", 1)
         If $fileReg = -1 Then
            MsgBox(0, "Error", "No se puede abrir archivo.")
         EndIf
         FileWriteLine($fileReg, @HOUR & ":" & @MIN & " " & @MDAY & " de " & @MON & " de " & @YEAR & " | play | " & $comando)
         FileClose($fileReg)
         SoundPlay($comando)
      Case Else
         ;
         Local $comando[2]
         $comando = unir_comando($parametros)
         $fileReg = FileOpen("reg.log", 1)
         If $fileReg = -1 Then
            MsgBox(0, "Error", "No se puede abrir archivo.")
         EndIf
         FileWriteLine($fileReg, @HOUR & ":" & @MIN & " " & @MDAY & " de " & @MON & " de " & @YEAR & " | " & $comando[0] & " " & $comando[1])
         FileClose($fileReg)
         ShellExecute($comando[0], $comando[1]);---------- ejecuta parametros
   EndSelect

EndFunc   ;==>correcto


;------------- Une el resto de parametros de comando --------------
Func unir_comando($parametros)
   ;
   Local $comando[2]
   $comando[1] = " "
   $xy = 0
   $comando[$xy] = $parametros[6]
   $x = 7
   While $x < UBound($parametros)
      If $parametros[$x] = "||" Then
         $xy = 1
      Else
         $comando[$xy] = $comando[$xy] & " " & $parametros[$x]
      EndIf
      $x = $x + 1
   WEnd
   Return $comando
EndFunc   ;==>unir_comando

Func comando_interno($parametros)
   ;
   $titulo = $parametros[7]
   $comodin = "no"
   $x = 8
   While $x < UBound($parametros)
      If $comodin = "si" Then
         $comando = $comando & " " & $parametros[$x]
      Else
         If $parametros[$x] <> "()" Then
            $titulo = $titulo & " " & $parametros[$x]
         EndIf
      EndIf
      If $parametros[$x] = "()" Then
         $x = $x + 1
         $comando = $parametros[$x]
         $comodin = "si"
      EndIf
      $x = $x + 1
   WEnd
   $fileReg = FileOpen("reg.log", 1)
   If $fileReg = -1 Then
      MsgBox(0, "Error", "No se puede abrir archivo.")
   EndIf
   FileWriteLine($fileReg, @HOUR & ":" & @MIN & " " & @MDAY & " de " & @MON & " de " & @YEAR & " | " & $titulo & " |" & $comando)
   FileClose($fileReg)
   
   $comando = StringReplace($comando, "||", @CRLF)
   MsgBox(0, $titulo, $comando, 15)
   
   
EndFunc   ;==>comando_interno


y el fichero crontab que tiene ejemplos

Código: Seleccionar todo

########################~ CRON 0,2,1,9 ~#################################################
#
#    ------------- minutos (0 - 59)
#    | ----------- horas (0 - 23)
#    | | --------- dia del mes (1 - 31)
#    | | | ------- mes (1 - 12)
#    | | | | ----- dia de la semana (0 - 7) (domingo=0, lunes=1, ... sabado=6,domingo=7)
#    | | | | |
#    * * * * * comando a ejecutar
#
#
#   i significa todos los valores validos si cinciden con la ejecución del CROM
#   * significa todos los valores validos
#   / permite definir una repeticion
#   - permite definir un rango
#   , permite definir varios valores
#
#   Comandos internos
#   ~~~~~~~~~~~~~~~~~~~~
#   :kill <proceso> cierra el proceso         ej:     :kill iexplore.exe   cierra el intene explores
#   :off Apaga el ordenador
#   :exit cierra cron
#   :reboot reinicia el ordenador
#   :beep <frecuencia> <duración>   ej:  :beep 500 1000
#   :play <nombre>         ej:  :play c:\windows\media\tada.wav
#   () <titulo> () <texto> mensaje emerjente   ej:  () Alerta () Este es un mensaje de prueva||Esta es otra linea
#
#   Como se puede obserbar hay algunas mejoras sobre el programa de crom orijinal
#
########################################################################################

# Esto es un comentario
# hora minutos diasdelmes mes de
#
# Se ejecuta cada minuto
#* * * * * Comando

# se ejecuta cada minuto a las 6 de la tarde
#* 18 * * * comando

# Se ejecuta Los Lunes cada minuto
#* * * * 1 comando

# Mensaje emerjete
#* * * * * () Titulo () Mensaje||Otra linea

#abre el fichero reg.log al iniciar el cron
i i i i i reg.log

#abre el fichero reg.log al iniciar el cron solo si el dia es laborable
i i i i 1-5 reg.log

#Cierra el bloc de notas a la hora de ejecutar el cron 
#i * * * * :kill notepad.exe

#Apaga el equipo los lunes, martes, miercoles jueves y viernes a la 20:00 horas
# los sabados y domingos a las 22:30 
#0 20 * * 1 :off
#0 20 * * 2 :off
#0 20 * * 3 :off
#0 20 * * 4 :off
#0 20 * * 5 :off
#30 22 * * 6 :off
#30 22 * * 0 :off

#esto hace lo mismo que lo anterior
#0 20 * * 1-5 :off
#30 22 * * 6,7 :off

#Ejecuta CCleaner con el parametro /auto los domingos a las 12:00 de la noche(00:00)
# ten encuenta que son necesarios los espacios en "||" para indicar los parametros
#0 0 * * 7 "C:\Archivos de programa\CCleaner\ccleaner.exe" || /auto

#apaga a las 10:25
#25 22 * * * :off

59 5 * * * () salir () Apagar el ordenador||dentro de 1 minuto a las 6:00
0 6 * * * :off ;Apagar el ordenador a las 6:00

#sonido a 500 hz durante 1 segundo
* * * * * :beep 500 1000

#suena el fichero c:\windows\media\tada.wav cada 15 minutos osea alas 0 15 30 45
#*/15 * * * * :play c:\windows\media\tada.wav
Yo cuando lo usaba habia creado un acceso directo en menu de inicio, su consumo de recursos es muy acotado