Crear su propia tarea de crontab
La aplicación admite tareas escritas en BeanShell o clases dentro de un archivo JAR. Recomendamos utilizar archivos JAR en lugar de BeanShell.
Entender el contexto de ejecución de una tarea de crontab
Sección titulada «Entender el contexto de ejecución de una tarea de crontab»Contexto de ejecución:
- La tarea de crontab se ejecuta con el usuario interno llamado “system” (la tarea no tiene una sesión de usuario válida).
- La tarea de crontab se ejecuta con el usuario administrador (la tarea tiene una sesión de usuario válida).
Utilizar el token del sistema es una buena práctica al llamar a métodos de la API desde una tarea de crontab:
String systemToken = DbSessionManager.getInstance().getSystemsystemToken();OKMFolder.getInstance().createSimple(systemToken, "/okm:root/test")Tarea de crontab basada en un archivo JAR
Sección titulada «Tarea de crontab basada en un archivo JAR»Requisitos:
- Debe implementar el método “public static void main(String[] args)”.
- Debe implementar el método “public static String cronTask(String systemToken)”.
package com.openkm;
import org.slf4j.Logger;import org.slf4j.LoggerFactory;
import com.openkm.module.db.stuff.DbSessionManager;
public class CronTabTest { private static Logger log = LoggerFactory.getLogger(CronTabTest.class);
public static void main(String[] args) { System.out.println(cronTask(DbSessionManager.getInstance().getSystemToken())); }
public static String cronTask(String systemToken) { return "mail body here"; }}Para crear un archivo JAR, siga las instrucciones de Crear un archivo JAR con Eclipse.
Tarea de crontab basada en BeanShell
Sección titulada «Tarea de crontab basada en BeanShell»Ejemplo que importa archivos de la carpeta /home/scanner a /okm:root/Scans
import com.openkm.module.db.stuff.*;import com.openkm.core.*;import com.openkm.api.OKMDocument;import java.io.*;import com.openkm.util.FileLogger;
String systemToken = DbSessionManager.getInstance().getSystemsystemToken();OKMDocument document = OKMDocument.getInstance();
public class OnlyExt implements FilenameFilter { String ext;
public OnlyExt(String ext) { this.ext = "." + ext; }
public boolean accept(File dir, String name) { return name.endsWith(ext); }}
File scans = new File("/home/scanner");Thread.sleep(10000); // Sleep 10 seconds in case files are still being written
try { for (File scan : scans.listFiles(new OnlyExt("pdf"))) { try { document.createSimple(systemToken, "/okm:root/Scans/" + scan.getName(), new FileInputStream(scan)); scan.delete(); } catch (Exception e) { FileLogger.error("CrontabSampleError", e.getMessage()); } }
} catch (Exception e) { FileLogger.error("CrontabSampleError", e.getMessage());}