




The ATLAS Metadata Interface Task Server (AMITaskServer) is a generic high level time-based job scheduler. It was originally developed for the A Toroidal LHC ApparatuS (ATLAS) experiment, one of the two general-purpose detectors at the Large Hadron Collider (LHC).
- Requirements
Make sure that Java 11, Maven 3 and AMIMQTTServerJava are installed:
java -version
mvn -version- Compiling sources
mvn packageGenerated standalone bundle: target/AMITaskServer-X.X.X-bundle.zip
AMITaskServer need a SQL table in order to store job definitions. Supported SGBD: MySQL, PostgreSQL, Oracle.
Schema for MySQL 5 and later:
CREATETABLE `router_task` (
`id`INT(11) NOT NULL AUTO_INCREMENT,
`name`VARCHAR(128) NOT NULL,
`description`VARCHAR(512) DEFAULT NULL,
`command`VARCHAR(1024) NOT NULL,
`commaSeparatedLocks`VARCHAR(512) DEFAULT NULL,
`locked`INT(1) DEFAULT '0'NOT NULL,
`oneShot`INT(1) DEFAULT '0'NOT NULL,
`priority`INT(3) DEFAULT '0'NOT NULL,
`timeStep`INT(11) DEFAULT '60'NOT NULL,
`serverName`VARCHAR(128) NOT NULL,
`running`INT(1) DEFAULT '0'NOT NULL,
`success`INT(1) DEFAULT '0'NOT NULL,
`report`TEXT,
`stdout`TEXT,
`stderr`TEXT,
`lastStartDate`INT(11) DEFAULT '0'NOT NULL,
`lastStopDate`INT(11) DEFAULT '0'NOT NULL,
PRIMARY KEY (`id`)
);CREATETABLE `router_task_server` (
`id`INT(11) NOT NULL AUTO_INCREMENT,
`name`VARCHAR(128) NOT NULL,
`description`VARCHAR(512) DEFAULT NULL,
PRIMARY KEY (`id`)
);Schema for SQLite 3 and later:
CREATETABLE "router_task" (
"id"INT(11) PRIMARY KEY,
"name"VARCHAR(128) NOT NULL,
"description"VARCHAR(512) DEFAULT NULL,
"command"VARCHAR(1024) NOT NULL,
"commaSeparatedLocks"VARCHAR(512) DEFAULT NULL,
"locked"TINYINT(1) DEFAULT '0'NOT NULL,
"oneShot"TINYINT(1) DEFAULT '0'NOT NULL,
"priority"TINYINT(3) DEFAULT '0'NOT NULL,
"timeStep"INT(11) DEFAULT '60'NOT NULL,
"serverName"VARCHAR(128) NOT NULL,
"running"TINYINT(1) DEFAULT '0'NOT NULL,
"success"TINYINT(1) DEFAULT '0'NOT NULL,
"report"TEXT,
"stdout"TEXT,
"stderr"TEXT,
"lastStartDate"INT(11) DEFAULT '0'NOT NULL,
"lastStopDate"INT(11) DEFAULT '0'NOT NULL
);CREATETABLE "router_task_server" (
"id"INT(11) PRIMARY KEY,
"name"VARCHAR(128) NOT NULL,
"description"VARCHAR(512) DEFAULT NULL
);Schema for PostgreSQL 10 and later:
CREATETABLE "router_task" (
"id"SERIALNOT NULL,
"name"VARCHAR(128) NOT NULL,
"description"VARCHAR(512) DEFAULT NULL,
"command"VARCHAR(1024) NOT NULL,
"commaSeparatedLocks"VARCHAR(512) DEFAULT NULL,
"locked"INT(1) DEFAULT '0'NOT NULL,
"oneShot"INT(1) DEFAULT '0'NOT NULL,
"priority"INT(3) DEFAULT '0'NOT NULL,
"timeStep"INT(11) DEFAULT '60'NOT NULL,
"serverName"VARCHAR(128) NOT NULL,
"running"INT(1) DEFAULT '0'NOT NULL,
"success"INT(1) DEFAULT '0'NOT NULL,
"report" CLOB,
"stdout" CLOB,
"stderr" CLOB,
"lastStartDate"INT(11) DEFAULT '0'NOT NULL,
"lastStopDate"INT(11) DEFAULT '0'NOT NULL
);CREATETABLE "router_task_server" (
"id"SERIALNOT NULL,
"name"VARCHAR(128) NOT NULL,
"description"VARCHAR(512) DEFAULT NULL
);Schema for Oracle 11c and later:
CREATETABLE "router_task" (
"id"NUMBER(11) NOT NULL,
"name"VARCHAR2(128) NOT NULL,
"description"VARCHAR2(512) DEFAULT NULL,
"command"VARCHAR2(1024) NOT NULL,
"commaSeparatedLocks"VARCHAR2(512) DEFAULT NULL,
"locked"NUMBER(1) DEFAULT '0'NOT NULL,
"oneShot"NUMBER(1) DEFAULT '0'NOT NULL,
"priority"NUMBER(3) DEFAULT '0'NOT NULL,
"timeStep"NUMBER(11) DEFAULT '60'NOT NULL,
"serverName"VARCHAR2(128) NOT NULL,
"running"NUMBER(1) DEFAULT '0'NOT NULL,
"success"NUMBER(1) DEFAULT '0'NOT NULL,
"report" CLOB,
"stdout" CLOB,
"stderr" CLOB,
"lastStartDate"NUMBER(11) DEFAULT '0'NOT NULL,
"lastStopDate"NUMBER(11) DEFAULT '0'NOT NULL
);
ALTERTABLE"router_task"
ADD CONSTRAINT"pk1_router_task"PRIMARY KEY ("id")
;
ALTERTABLE"router_task"
ADD CONSTRAINT"uk1_router_task" UNIQUE ("name")
;
CREATESEQUENCE "seq_router_task"
START WITH 1 INCREMENT BY 1 CACHE 10
;
CREATETRIGGER "trig1_router_task"
BEFORE INSERT ON"router_task"
FOR EACH ROW
BEGINSELECT"seq_router_task".NEXTVAL INTO :NEW."id"FROM dual;
END
;CREATETABLE "router_task_server" (
"id"NUMBER(11) NOT NULL,
"name"VARCHAR2(128) NOT NULL,
"description"VARCHAR2(512) DEFAULT NULL
);
ALTERTABLE"router_task_server"
ADD CONSTRAINT"pk1_router_task_server"PRIMARY KEY ("id")
;
ALTERTABLE"router_task_server"
ADD CONSTRAINT"uk1_router_task_server" UNIQUE ("name")
;
CREATESEQUENCE "seq_router_task_server"
START WITH 1 INCREMENT BY 1 CACHE 10
;
CREATETRIGGER "trig1_router_task_server"
BEFORE INSERT ON"router_task_server"
FOR EACH ROW
BEGINSELECT"seq_router_task_server".NEXTVAL INTO :NEW."id"FROM dual;
END
;CREATE OR REPLACEFUNCTIONFROM_UNIXTIME(UnixTime INNUMBER) RETURN TIMESTAMP IS
BEGIN
RETURN (TIMESTAMP'1970-01-01 00:00:00 UTC'+ UnixTime * INTERVAL '1' SECOND) AT LOCAL;
END FROM_UNIXTIME;Configuration file template (~/.ami/AMI.xml, /etc/ami/AMI.xml or java -Dami.conffile=path/AMI.xml, ...):
<?xml version="1.0" encoding="ISO-8859-1"?>
<properties>
<propertyname="server_name"><![CDATA[name]]></property>
<propertyname="mqtt_url"><![CDATA[url]]></property>
<propertyname="mqtt_username"><![CDATA[username]]></property>
<propertyname="mqtt_password"><![CDATA[password]]></property>
<propertyname="jdbc_url"><![CDATA[url]]></property>
<propertyname="jdbc_username"><![CDATA[username]]></property>
<propertyname="jdbc_password"><![CDATA[password]]></property>
<!-- <property name="exclusion_server_url"><![CDATA[url]]></property>--><!-- <property name="ping_period"><![CDATA[30]]></property>--><!-- <property name="cleanup_period"><![CDATA[172800]]></property>--><!-- <property name="quality_of_service"><![CDATA[0]]></property>--><!-- <property name="max_nb_of_running_tasks"><![CDATA[10]]></property>--><!-- <property name="priority_probability_ratio"><![CDATA[2.0]]></property>-->
</properties>vim startAMITaskServer.sh
./AMITaskServer start
./AMITaskServer stop
./AMITaskServer lock
./AMITaskServer unlock
./AMITaskServer status
./AMITaskServer --helpcp AMITaskServer.service /etc/systemd/system
service AMITaskServer start
service AMITaskServer stop
service AMITaskServer lock
service AMITaskServer unlock
service AMITaskServer statusSee official image there.
The following environment variables are available in the task processes:
AMI_TASK_ID: the task idAMI_TASK_MAME: the task nameAMI_TASK_COMMAND: the command lineAMI_TASK_REPORT_FILE: path where to write the task report