任务计划

来自 PostgreSQL Wiki
跳到导航跳到搜索

总体情况

我们将了解如何配置操作系统,以一种非常方便的方式执行定期任务。我们有两个基本机制来计划任务

 -.crontab: nos permite programar tareas que queremos repetir de forma periódica.
 -.at: nos permite realizar una tarea a una hora determinada pero sólo una vez.


Crontab

crontab 命令 (cron) 允许我们定时计划任务和/或执行命令,以某些小时、星期中的某些天、月份、年份等等。借助于此命令,每个管理员数据库都可以定义他们自己的计划任务。

基本语法

   * crontab -l Mostrar las tareas programadas por el usuario.
   * crontab -e Editar el fichero crontab. Con esto editaremos el fichero de configuración de crontab de cada usuario para poder modificar las tareas programadas.
   * crontab -r Eliminar el fichero crontab corriente.
   * crontab -u <usuario> Aplicar una de las opciones anteriores para un usuario determinado. Sólo root puede hacerlo. 

守护程序 cron 在

   * el archivo /etc/crontab (tables for cron).
   * los archivos ubicados en el directorio /etc/cron.d
   * los archivos /var/spool/cron/crontabs/<usuario>

编辑 crontab 文件

gilbertoc@gilbertoc:~$ crontab -e 

crontab 文件内容

类似于

# m  h dom mon dow user command
 17  * *   *   *   root cd / && run-parts --report /etc/cron.hourly
 25  6 *   *   *   root cd / && run-parts --report /etc/cron.daily
 47  6 *   *   7   root cd / && run-parts --report /etc/cron.weekly
 52  6 1   *   *   root cd / && run-parts --report /etc/cron.monthly
 
# Hacer una copia de seguridad del directorio documentos cada día a las 00:00
 0   0 * * *            tar -czf docs-`date -I`.tar.gz ~/documentos/ 
 (el símbolo ~ es equivalente a $HOME, y a /home/usuario/)

# Hacer una copia de seguridad de la Base de datos cada día a las 07:30 y 21:30
 30  7  * *  1-5      /var/respaldos/scripts/mantenimiento_postgresql.sh
 30  21 * *  1-5      /var/respaldos/scripts/mantenimiento_postgresql.sh
  
   * m: minuto [0-59].
   * h: hora [0-23].
   * dom: día del mes [1-31].
   * mon: mes [1-12].
   * dow: día de la semana [0-7] (0 ó 7 es Domingo).
   * user: usuario.
   * command: comando.

在表达分钟、小时、天、月和年时,我们可以使用列表:3,23,43;时间范围:1-5;步长:2-6/2 (= 2,4,6);和 *(任何值)。

/etc/crontab 包含指导 cron 执行目录中脚本的指令

   * /etc/cron.hourly
   * /etc/cron.daily
   * /etc/cron.weekly
   * /etc/cron.monthly

为我们要计划的每个任务添加一行。我们可以编写我们的脚本并让 crontab 执行它们,以便执行更复杂的任务计划。

在需要重启服务的情况下,可以执行

gilbertoc@gilbertoc:~$ service crond restart
          O
gilbertoc@gilbertoc:~$ /etc/init.d/crond restart

at

此命令允许我们仅执行一次任务计划,在特定时间执行。

* <hora><dia> Para especificar la fecha por completo.
El parámetro <hora> es obligatorio. 
 Podemos ingresar valores de la forma 1800,18:00,0600pm, o bien uno de los 3 valores especiales: noon (mediodia), teatime (16:00) o midnight (00:00). 
El parámetro <dia> es opcional. 
 Podemos especificarlo de las siguientes maneras: 12/23/2005 (notación americana), 23.12.2005 (notación europea). 
 Podemos omitir el año, pero entonces sólo podemos usar la notación europea (por ejemplo: 23.12).
 También podemos especificar el mes abreviado como: Dec 23 o bien como 23 Dec. 

规范

* now + <intervalo> Donde intervalo es: <n> (minutos|horas|días|semanas|mes). 

选项

   * -l Para mostrar la lista de tareas que tenemos programadas.
   * -d <num_tarea> Para eliminar la tarea que queramos. Cada tarea tiene asociado un número que podemos ver con la opción anterior.

示例 1

   $ at 5:30pm 

或者

   $ at 17:30 

一旦我们执行此操作,将会出现 at 提示符,让我们输入我们的命令或任务,我们希望在那个时间执行。

   at> gmessage "Comienza la salva de datos!!" 

一旦我们输入完命令,我们将按 Control + D 退出 at。

示例 2

计划在 3 小时后的任务

$ at now + 3 hours