Create a crontab entry using XML
file: crontab_txt.xsl
<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:output method="text"/> <xsl:template match="crontab_entry"> <xsl:apply-templates select="minutes"/> <xsl:apply-templates select="hours"/> <xsl:apply-templates select="day_of_month"/> <xsl:apply-templates select="months"/> <xsl:apply-templates select="day_of_week"/> <xsl:value-of select="command" /> </xsl:template> <xsl:template match="minutes"> <xsl:apply-templates select="minute"/> <xsl:if test="not(minute) or minute=''">*</xsl:if> <xsl:call-template name="format_unit" /> </xsl:template> <xsl:template match="hours"> <xsl:apply-templates select="hour"/> <xsl:if test="not(hour) or hour=''">*</xsl:if> <xsl:call-template name="format_unit" /> </xsl:template> <xsl:template match="day_of_month"> <xsl:apply-templates select="day"/> <xsl:if test="not(day) or day=''">*</xsl:if> <xsl:call-template name="format_unit" /> </xsl:template> <xsl:template match="day_of_week"> <xsl:apply-templates select="day"/> <xsl:if test="not(day) or day=''">*</xsl:if> <xsl:call-template name="format_unit" /> </xsl:template> <xsl:template match="months"> <xsl:apply-templates select="month"/> <xsl:if test="not(month) or month=''">*</xsl:if> <xsl:call-template name="format_unit" /> </xsl:template> <xsl:template match="month"> <xsl:call-template name="format_value" /> </xsl:template> <xsl:template match="day"> <xsl:call-template name="format_value" /> </xsl:template> <xsl:template match="hour"> <xsl:call-template name="format_value" /> </xsl:template> <xsl:template match="minute"> <xsl:call-template name="format_value" /> </xsl:template> <xsl:template name="format_value"> <xsl:value-of select="."/> <xsl:if test="not(position() =last())"><xsl:text>,</xsl:text> </xsl:if> </xsl:template> <xsl:template name="format_unit"> <xsl:call-template name="recurring" /> <xsl:text> </xsl:text> </xsl:template> <xsl:template name="recurring"> <xsl:if test="@every">/<xsl:value-of select="@every"/> </xsl:if> </xsl:template> </xsl:stylesheet>
file: crontab.xml
<crontab_entry> <minutes/> <hours every="3"> <day_of_month> <day>3</day> <day>10</day> <day>15</day> </day_of_month> <months/> <day_of_week/> <command>ssh james@192.168.1.220 runjob.sh</command> </crontab_entry>
output: * */3 3,10,15 * * ssh james@192.168.1.220 runjob.sh
A helpful crontab.xml template
<cron> <minutes> <!-- minute (0 - 59) --> <minute></minute> </minutes <hours> <!-- hour (0 -23) --> <hour></hour> </hours> <day_of_month> <!-- day of month (1 - 31) --> <day></day> </day_of_month> <months> <!-- month (1 - 12) --> <month></month> </months> <day_of_week> <!-- day of week (0 - 6) (Sunday=0 or 7) --> <day></day> </day_of_week> <command></command> </cron>