﻿<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet href="scheduler.xsl" type="text/xsl"?>


<!--$Id$-->
<!--    title    = "Konfiguration in XML"-->

<description 
    title    = "XML Configuration" 
    base_dir = ""
    author   = "$Author: aa $"
    date     = "$Date: 2015-12-01 21:42:49 +0200 (Tu, 01 Dec 2015) $"
>

		<scheduler_keyword keyword="Configuration"/>
<!--<scheduler_keyword keyword="Konfiguration"/>-->
		<scheduler_keyword keyword="XML Configuration"/>
<!--<scheduler_keyword keyword="XML-Konfiguration"/>-->

<p>
    The file containing the XML configuration should be specified when starting the JobScheduler.
<!--Beim Start des JobScheduler geben Sie die Datei an, die die mit XML formulierte Konfiguration enthält.-->
</p>

<h2>Example</h2>

<p>
    The following shows a simple configuration file with a shell job:
<!--Eine einfache Konfigurationsdatei mit einem Job in JavaScript (für Windows):-->
</p>
<!--
<p>
    Die <code>DOCTYPE</code>-Zeile ist optional. Hier ist die jeweils aktuelle DTD eingestellt
</p>
-->    
<pre>
&lt;?xml version="1.0"><!--&lt;!DOCTYPE spooler SYSTEM "http://zsch.de/sos/scheduler/scheduler.dtd">-->
&lt;spooler>
    &lt;config>
        &lt;jobs>
            &lt;job name="hello_world">
                &lt;script language="shell">&lt;![CDATA[
                    echo hello world
                ]]&gt;&lt;/script>

                &lt;run_time repeat="10"/>
            &lt;/job>
        &lt;/jobs>
    &lt;/config>
&lt;/spooler>
</pre>

<p>
    This example shows the configuration of the <code>hello_world</code> job, which the JobScheduler repeats every 10 seconds. 
</p>
<p>
    When this configuration is saved in the <code>hello_world.xml</code> file, the JobScheduler could be started as follows (for Windows):
<!--Konfiguriert ist hier der Job <code>test_job</code>, den der JobScheduler alle 10 Sekunden wiederholen wird. 
		Wenn diese Konfiguration in der Datei <code>hallo_welt.xml</code> abgelegt ist, 
		können Sie den JobScheduler so starten:-->
</p>

<pre>…<i>scheduler installation path</i>…\bin\scheduler.exe -config=hello_world.xml</pre>

<p>
    Note that if the JobScheduler has been started at the command line, it can be stopped using the "Ctrl-C" keys.
<!--Ein gestarteter JobScheduler kann mit Ctrl-C abgebrochen werden.-->
</p>

<p>
    Alternatively you could create individual configuration files per job, job chain etc. that would contain
    exclusively the elements required by these objects:
</p>
<pre>
&lt;?xml version="1.0"><!--&lt;!DOCTYPE spooler SYSTEM "http://zsch.de/sos/scheduler/scheduler.dtd">-->
&lt;job>
    &lt;script language="shell">&lt;![CDATA[
        echo hello world
    ]]&gt;&lt;/script>

    &lt;run_time repeat="10"/>
&lt;/job>
</pre>

<p>
    When this configuration is saved in a file
    <code><i>scheduler installation path</i>/config/live/hello_world.job.xml</code>, 
    then it would be automatically used by a running JobScheduler.
</p>



    <h2>Coding the XML Configuration</h2>
<!--<h2>Codierung der XML-Konfiguration</h2>-->
<p>
    <code>&lt;?xml encoding="UTF-8"?></code>&#160; and<br/>
    <code>&lt;?xml encoding="ISO-8859-1"?></code>&#160; are allowed.<br/>
</p>                                                        
<p>
    Note that the  JobScheduler only processes 8 bit Characters (ISO-8859-1).
<!--Der JobScheduler verarbeitet nur 8bit-Zeichen (ISO-8859-1).-->
</p>


<h2>Configuration Schema</h2>
<!--<h2>Schema der Konfiguration</h2>-->

<p>
    The JobScheduler verifies the XML configuration according to the 
    <a href="common-engine-files/scheduler.xsd" type="text/plain" charset="utf-8">JobScheduler XML Schema</a> (Is only shown correctly in IE).
<!--Der JobScheduler prüft die XML-Konfiguration gegen das
    <a href="common-engine-files/scheduler.xsd" type="text/plain" charset="utf-8">XML-Schema des Schedulers</scheduler_a>.-->
</p>
<p>
    Clicking on an XML element in the schema list below leads to a description of the element:
<!--Klicken Sie auf ein XML-Element, um dessen Beschreibung zu sehen.-->
</p>


<pre>&lt;<scheduler_a href="xml/spooler.xml">spooler</scheduler_a>
    &lt;<scheduler_a href="xml/config.xml">config</scheduler_a> central_configuration_directory = "…"
            configuration_add_event    = "…"
            configuration_delete_event = "…"
            configuration_directory    = "…"
            configuration_update_event = "…"
            include_path               = "…"
            ip_address                 = "…"
            log_dir                    = "…"
            mail_xslt_stylesheet       = "…"
            param                      = "…"
            port                       = "4444"
            priority_max               = "1000"
            spooler_id                 = ""
            supervisor                 = "…"
            tcp_port                   = "4444"
            udp_port                   = "4444">
            time_zone                  = "...">
            
        &lt;<scheduler_a href="xml/base.xml">base</scheduler_a> file="…"/>

        &lt;<scheduler_a href="xml/params.xml">params</scheduler_a>&gt;
            &lt;<scheduler_a href="xml/param.xml">param</scheduler_a> name="…" value="…"/>
        &lt;/params>

        &lt;<scheduler_a href="xml/security.xml">security</scheduler_a>&gt;
            &lt;<scheduler_a href="xml/allowed_host.xml">allowed_host</scheduler_a> name="…" level="…"/>
            …
        &lt;/security>

        &lt;plugins&gt;
            &lt;plugin java_class="…"/>
            …
        &lt;/plugins>

        &lt;<scheduler_a href="xml/cluster.xml">cluster</scheduler_a> heart_beat_own_timeout  = "…" 
                 heart_beat_timeout      = "…"
                 heart_beat_warn_timeout = "…"/>

        &lt;<scheduler_a href="xml/process_classes.xml">process_classes</scheduler_a> ignore  = "no">
            &lt;<scheduler_a href="xml/process_class.xml">process_class</scheduler_a> max_processes = "…"
                           name          = "…"
                           spooler_id    = "…">
                &lt;<scheduler_a href="xml/remote_schedulers.xml">remote_schedulers</scheduler_a> ignore  = "no">
                    &lt;<scheduler_a href="xml/remote_scheduler.xml">remote_scheduler</scheduler_a> 
                        remote_scheduler       = "…"
                        http_heartbeat_period  = "…"
                        http_heartbeat_timeout  = "…">
                    &lt;/remote_scheduler>
                &lt;/remote_schedulers>
            &lt;/process_class>
            …
        &lt;/process_classes>

        &lt;<scheduler_a href="xml/schedules.xml">schedules></scheduler_a>
            &lt;<scheduler_a href="xml/schedule.xml">schedule</scheduler_a> name = "…"
                substitute = "…"
                valid_from = "…"
                valid_to   = "…"/>
            …
        &lt;/schedules>

        &lt;<scheduler_a href="xml/locks.xml">locks></scheduler_a>
            &lt;<scheduler_a href="xml/lock.xml">lock</scheduler_a> name= "…" …/>
            …
        &lt;/locks>

        &lt;<scheduler_a href="xml/script.xml">script</scheduler_a> com_class  = "…"
                filename   = "…" 
                java_class = "…"
                language   = "…" >
            &lt;<scheduler_a href="xml/include.xml">include</scheduler_a> file="…"/>
            &lt;![CDATA[
                <i>program-code</i>…
            ]]&gt;
        &lt;/script>

        &lt;<scheduler_a href="xml/http_server.xml">http_server</scheduler_a>&gt;
            &lt;<scheduler_a href="xml/http.authentication.xml">http.authentication</scheduler_a> scheme="basic">
                &lt;<scheduler_a href="xml/http.users.xml">http.users</scheduler_a>&gt;
                    &lt;<scheduler_a href="xml/http.user.xml">http.user</scheduler_a> name="…" password_md5="…"/>
                    …
                &lt;/http.users>
            &lt;/http.authentication>
            
            &lt;<scheduler_a href="xml/http_directory.xml">http_directory</scheduler_a> path="…" url_path="…"/>
            &lt;<scheduler_a href="xml/web_service.xml">web_service</scheduler_a> job_chain="…" url_path="…" …>
            &lt;<scheduler_a href="xml/params.xml">params</scheduler_a>&gt;
                     &lt;<scheduler_a href="xml/param.xml">param</scheduler_a> name="…" value="…"/>
                     …
                 &lt;/params>
            &lt;/web_service>
            …
        &lt;/http_server>

        &lt;<scheduler_a href="xml/holidays.xml">holidays</scheduler_a>&gt;
            &lt;<scheduler_a href="xml/holiday.xml">holiday</scheduler_a> date="…"/>
            &lt;<scheduler_a href="xml/include.xml">include</scheduler_a> file="…"/>
            &lt;<scheduler_a href="xml/weekdays.xml">weekdays</scheduler_a> date="…"/>
        &lt;/holidays>

        &lt;<scheduler_a href="xml/jobs.xml">jobs></scheduler_a>
            &lt;<scheduler_a href="xml/job.xml">job</scheduler_a>
                force_idle_timeout = "yes|no"
                idle_timeout   = "…"
                ignore_signals = "…"
                java_options   = "…"
                min_tasks      = "…"
                name           = "…"
                order          = "no"
                priority       = "…"
                process_class  = "…"
                spooler_id     = "…"
                stop_on_error  = "yes"
                tasks          = "1"
                temporary      = "no"
                timeout        = "…"
                title          = "…"
                visible        = "yes"
            >

                &lt;<scheduler_a href="xml/description.xml">description</scheduler_a>&gt; … &lt;/description&gt;

                &lt;<scheduler_a href="xml/lock.use.xml">lock.use</scheduler_a> lock="…" …/>

                &lt;<scheduler_a href="xml/environment.xml">environment</scheduler_a>&gt;
                    &lt;<scheduler_a href="xml/variable.xml">variable</scheduler_a> name="…" value="…"/>
                    …
                &lt;/environment>

                &lt;<scheduler_a href="xml/params.xml">params</scheduler_a>&gt;
                    &lt;<scheduler_a href="xml/param.xml">param</scheduler_a> name="…" value="…"/>
                    …
                &lt;/params>

                &lt;<scheduler_a href="xml/script.xml">script</scheduler_a> com_class  = "…"
                        filename   = "…" 
                        java_class = "…"
                        language   = "…" >
                    &lt;<scheduler_a href="xml/include.xml">include</scheduler_a> file="…"/>
                    &lt;![CDATA[ <i>program-code</i>… ]]&gt;
                &lt;/script>
          <!-- JS-1173 -->
          <!--<i>or</i>
                &lt;<scheduler_a href="xml/process.xml">process</scheduler_a> file         = "…"
                         ignore_error = "no"
                         ignore_signal= "no" 
                         log_file     = ""
                         param        = ""  >
                &lt;/process>-->

                &lt;<scheduler_a href="xml/monitor.xml">monitor</scheduler_a> name         = "…"
                         ordering     = "…">
                   &lt;<scheduler_a href="xml/script.xml">script language="…" …></scheduler_a>…&lt;script/>
                &lt;/monitor>

                &lt;<scheduler_a href="xml/start_when_directory_changed.xml">start_when_directory_changed</scheduler_a>  directory="…"  regex="…" />

                &lt;<scheduler_a href="xml/delay_after_error.xml">delay_after_error</scheduler_a>  delay="…"  error_count="…" />
                 
                &lt;<scheduler_a href="xml/delay_order_after_setback.xml">delay_order_after_setback</scheduler_a>  delay="…"  is_maximum="yes|no"  
                                            setback_count="…" />

                &lt;<scheduler_a href="xml/run_time.xml">run_time</scheduler_a> let_run="no">
                    &lt;<scheduler_a href="xml/period.xml">period</scheduler_a> begin        = "00:00"
                            end          = "24:00"
                            let_run      = "…"
                            repeat       = "…"     
                            single_start = "…"
                            when_holiday = "…"     />

                    &lt;<scheduler_a href="xml/date.xml">date</scheduler_a> date="yyyy-mm-dd"/>
                    …

                    &lt;<scheduler_a href="xml/weekdays.xml">weekdays</scheduler_a>&gt;
                        &lt;<scheduler_a href="xml/day.xml">day</scheduler_a> day="…">
                           &lt;<scheduler_a href="xml/period.xml">period …/></scheduler_a>
                            …
                        &lt;/day>
                        …
                    &lt;/weekdays>

                    &lt;<scheduler_a href="xml/monthdays.xml">monthdays</scheduler_a>&gt;
                        &lt;<scheduler_a href="xml/day.xml">day</scheduler_a> day="…">
                            &lt;<scheduler_a href="xml/period.xml">period …/></scheduler_a>
                            …
                        &lt;/day>
                        &lt;<scheduler_a href="xml/weekday.xml">weekday</scheduler_a> weekday="…" which="…">
                            &lt;<scheduler_a href="xml/period.xml">period …/></scheduler_a>
                            …
                        &lt;/weekday>
                        …
                    &lt;/monthdays>

                    &lt;<scheduler_a href="xml/ultimos.xml">ultimos</scheduler_a>&gt;
                        &lt;<scheduler_a href="xml/day.xml">day</scheduler_a> day="…">
                            &lt;<scheduler_a href="xml/period.xml">period …/></scheduler_a>
                            …
                        &lt;/day>
                        …
                    &lt;/ultimos>

                    &lt;<scheduler_a href="xml/month.xml">month</scheduler_a> month="…">
                        &lt;<scheduler_a href="xml/period.xml">period</scheduler_a> begin        = "00:00"
                                end          = "24:00"
                                let_run      = "…"
                                repeat       = "…"     
                                single_start = "…"     />
                        &lt;<scheduler_a href="xml/weekdays.xml">weekdays</scheduler_a>&gt;
                            &lt;<scheduler_a href="xml/day.xml">day</scheduler_a> day="…">
                               &lt;<scheduler_a href="xml/period.xml">period …/></scheduler_a>
                                …
                            &lt;/day>
                            …
                        &lt;/weekdays>
                        &lt;<scheduler_a href="xml/monthdays.xml">monthdays</scheduler_a>&gt;
                            &lt;<scheduler_a href="xml/day.xml">day</scheduler_a> day="…">
                                &lt;<scheduler_a href="xml/period.xml">period …/></scheduler_a>
                                …
                            &lt;/day>
                            &lt;<scheduler_a href="xml/weekday.xml">weekday</scheduler_a> weekday="…" which="…">
                                &lt;<scheduler_a href="xml/period.xml">period …/></scheduler_a>
                                …
                            &lt;/weekday>
                            …
                        &lt;/monthdays>

                        &lt;<scheduler_a href="xml/ultimos.xml">ultimos</scheduler_a>&gt;
                            &lt;<scheduler_a href="xml/day.xml">day</scheduler_a> day="…">
                                &lt;<scheduler_a href="xml/period.xml">period …/></scheduler_a>
                                …
                            &lt;/day>
                            …
                        &lt;/ultimos>
                        …
                    &lt;/month>

                    &lt;<scheduler_a href="xml/holidays.xml">holidays</scheduler_a>&gt;
                        &lt;<scheduler_a href="xml/holiday.xml">holiday</scheduler_a> date="yyyy-mm-dd"/>
                        &lt;<scheduler_a href="xml/include.xml">include</scheduler_a> file="…"/>
                        …
                    &lt;/holidays>
                    
                    &lt;<scheduler_a href="xml/at.xml">at</scheduler_a> at="yyyy-mm-dd HH:MM:SS"/>
                &lt;/run_time>
                 
                &lt;<scheduler_a href="xml/commands.xml">commands on_exit_code="…"</scheduler_a>
                    &lt;<a href="xml/start_job.xml">start_job</a> job="…" …>
                        &lt;<a href="xml/params.xml">params</a>&gt;
                            &lt;<a href="xml/param.xml">param</a> name="…" value="…"/>
                            &lt;<a href="xml/copy_params.xml">copy_params</a> from="task"/>
                            &lt;<a href="xml/copy_params.xml">copy_params</a> from="order"/>
                            …
                        &lt;/params>
                    &lt;/start_job>    
                     
                    &lt;<a href="xml/add_order.xml">add_order</a> job_chain="…" …>
                        &lt;<a href="xml/params.xml">params</a>&gt;
                            &lt;<a href="xml/param.xml">param</a> name="…" value="…"/>
                            &lt;<a href="xml/copy_params.xml">copy_params</a> from="task"/>
                            &lt;<a href="xml/copy_params.xml">copy_params</a> from="order"/>
                            …
                        &lt;/params>
                    &lt;/add_order>
                    …
                &lt;/commands>
            &lt;/job>
            …
        &lt;/jobs>

        &lt;<scheduler_a href="xml/job_chains.xml">job_chains</scheduler_a>&gt;
            &lt;<scheduler_a href="xml/job_chain.xml">job_chain</scheduler_a>
                    distributed       = "no"
                    name              = "…"
                    orders_recoverable= "yes"
                    title             = "…"
                    visible           = "yes"
                >
                &lt;<scheduler_a href="xml/file_order_source.xml">file_order_source</scheduler_a> 
                    delay_after_error = "…"
                    directory         = "…"  
                    max               = "…"  
                    next_state        = "…"
                    regex             = "…"  
                    repeat            = "…"  
                />
                …
                &lt;<scheduler_a href="xml/job_chain_node.xml">job_chain_node</scheduler_a>
                    delay       = "…"  
                    error_state = "…"
                    job         = "…"  
                    next_state  = "…"  
                    on_error    = "suspend|resume"  
                    state       = "…"  
                >
                
                    &lt;<scheduler_a href="xml/on_return_codes.xml">on_return_codes</scheduler_a>
                    >
                        
                        &lt;<scheduler_a href="xml/on_return_code.xml">on_return_code</scheduler_a>
                            return_code    = "…"
                        >
                            &lt;<a href="xml/add_order-node_order_plugin.xml">add_order</a> 
                                xmlns       = "https://jobscheduler-plugins.sos-berlin.com/NodeOrderPlugin"  
                                job_chain   = "…"  
                                id          = "…" 
                            >
                                &lt;<a href="xml/params-node_order_plugin.xml">params</a>&gt;
                                    &lt;<a href="xml/param-node_order_plugin.xml">param</a> name="…" value="…"/>
                                    …
                                &lt;/params>
                            &lt;/add_order>
                            …
                            &lt;<a href="xml/to_state.xml">to_state</a> state="…" />
                        &lt;/on_return_code>
                        …
                    &lt;/on_return_codes>
                    
                &lt;/job_chain_node>
                …
                &lt;<scheduler_a href="xml/file_order_sink.xml">file_order_sink</scheduler_a> 
                    move_to     = "…"
                    remove      = "yes"
                    state       = "…"
                />
                …
            &lt;/job_chain>
            &lt;<scheduler_a href="xml/job_chain.xml">job_chain</scheduler_a> name="…"&gt;
                &lt;<scheduler_a href="xml/job_chain_node.job_chain.xml">job_chain_node.job_chain</scheduler_a>
                    job_chain   = "…"  
                    error_state = "…"
                    next_state  = "…"  
                    state       = "…"  
                />
                …
                &lt;<scheduler_a href="xml/job_chain_node.end.xml">job_chain_node.end</scheduler_a> 
                    state       = "…"
                />
                …
            &lt;/job_chain>
            …
        &lt;/job_chains>

        &lt;<scheduler_a href="xml/commands.xml">commands</scheduler_a>&gt;
            …
        &lt;/commands>

    &lt;/config>
&lt;/spooler></pre>

</description>
