{"id":2387,"date":"2018-11-23T15:43:04","date_gmt":"2018-11-23T15:43:04","guid":{"rendered":"https:\/\/research.reading.ac.uk\/act\/?post_type=kbe_knowledgebase&#038;p=2387"},"modified":"2025-11-28T14:45:30","modified_gmt":"2025-11-28T14:45:30","slug":"cronjobs-on-the-academic-computing-cluster","status":"publish","type":"kbe_knowledgebase","link":"https:\/\/research.reading.ac.uk\/act\/knowledgebase\/cronjobs-on-the-academic-computing-cluster\/","title":{"rendered":"Cronjobs on the Academic Computing Cluster"},"content":{"rendered":"<h3 data-start=\"292\" data-end=\"306\">Overview<\/h3>\n<p data-start=\"308\" data-end=\"783\">The <a href=\"https:\/\/research.reading.ac.uk\/act\/knowledgebase_category\/cluster\/\">Reading Academic Computing Cluster (RACC2)<\/a> provides a dedicated cron-job node. This means you can schedule recurring tasks in the same environment used by other research computing applications. If a command works on a login node, it will also work on the cronjob node \u2014 including the ability to submit batch jobs. However, note that any submitted batch job may still wait in the scheduler queue, just like any other batch job.<\/p>\n<p data-start=\"785\" data-end=\"993\">This guide offers a concise introduction to using cron on RACC2. It is not a comprehensive tutorial \u2014 for that, many excellent resources are available elsewhere online.<\/p>\n<h3 data-start=\"1000\" data-end=\"1021\"><\/h3>\n<p>&nbsp;<\/p>\n<h3 data-start=\"1000\" data-end=\"1021\">Getting started<\/h3>\n<p><strong>1. Connect to the cron-job node<\/strong><\/p>\n<pre class=\"nums:false nums-toggle:false lang:default highlight:0 decode:true\">ssh &lt;username&gt;@racc2-apps.act.rdg.ac.uk<\/pre>\n<p><strong>2. Manage your crontab<\/strong><\/p>\n<ul data-start=\"1196\" data-end=\"1638\">\n<li data-start=\"1196\" data-end=\"1336\">\n<p data-start=\"1198\" data-end=\"1221\">To edit your crontab (the default editor is vi):<\/p>\n<\/li>\n<\/ul>\n<pre>crontab -e<\/pre>\n<ul data-start=\"1196\" data-end=\"1638\">\n<li data-start=\"1196\" data-end=\"1336\">\n<p data-start=\"1198\" data-end=\"1221\">To list your cron entries:<\/p>\n<\/li>\n<\/ul>\n<pre>crontab -l<\/pre>\n<ul data-start=\"1196\" data-end=\"1638\">\n<li data-start=\"1196\" data-end=\"1336\">\n<p data-start=\"1198\" data-end=\"1221\">To remove all your cron jobs:<\/p>\n<\/li>\n<\/ul>\n<pre>crontab -r<\/pre>\n<div>\u26a0\ufe0f Be careful: there is no backup \u2014 use this only if you\u2019re sure.<\/div>\n<div><\/div>\n<h3 data-start=\"1645\" data-end=\"1701\"><\/h3>\n<p>&nbsp;<\/p>\n<h3 data-start=\"1645\" data-end=\"1701\">Recommended workflow (safer than editing directly)<\/h3>\n<p data-start=\"1703\" data-end=\"1762\">Instead of editing the live crontab directly, we recommend:<\/p>\n<ol data-start=\"1764\" data-end=\"1953\">\n<li data-start=\"1764\" data-end=\"1840\">\n<p data-start=\"1767\" data-end=\"1840\">Create a text file in your home directory (for example, crontab.txt).<\/p>\n<\/li>\n<li data-start=\"1841\" data-end=\"1877\">\n<p data-start=\"1844\" data-end=\"1877\">Add all the cron entries there.<\/p>\n<\/li>\n<li data-start=\"1878\" data-end=\"1953\">\n<p data-start=\"1881\" data-end=\"1910\">Install the cron file with:<\/p>\n<\/li>\n<\/ol>\n<pre>crontab crontab.txt<\/pre>\n<p>This workflow helps avoid accidental overwrites or deletion.<\/p>\n<p>&nbsp;<\/p>\n<h3 data-start=\"2059\" data-end=\"2085\">Example cron entries<\/h3>\n<ul data-start=\"2087\" data-end=\"3130\">\n<li data-start=\"2087\" data-end=\"2323\">\n<p data-start=\"2089\" data-end=\"2128\">Simple message at 17:30 every day<\/p>\n<\/li>\n<\/ul>\n<pre class=\"nums:false nums-toggle:false lang:default highlight:0 decode:true\">30 17 * * * \/usr\/bin\/echo It\\'s `\/usr\/bin\/date +\\%R`. Time to go home!<\/pre>\n<p>Running this job every day sends you an email with the output. Note that we need to escape some special characters.<\/p>\n<p>&nbsp;<\/p>\n<ul data-start=\"2087\" data-end=\"3130\">\n<li data-start=\"2087\" data-end=\"2323\">\n<p data-start=\"2089\" data-end=\"2128\">Avoid frequent email by redirecting output<\/p>\n<\/li>\n<\/ul>\n<p>If your job generates a lot of output, you can redirect it to a log file:<\/p>\n<pre class=\"nums:false nums-toggle:false lang:default highlight:0 decode:true\">*\/5 * * * * script.sh &gt;&gt; $HOME\/cronjob_outputs\/output.log<\/pre>\n<p>The above job, runs every 5 minutes. Use &gt; to overwrite the log each run, or &gt;&gt; to append. By default, cron sends standard error via email. If you want to combine stdout and stderr:<\/p>\n<pre><span class=\"lang:default decode:true crayon-inline\">*\/5 * * * * script.sh &gt;&gt; $HOME\/cronjob_outputs\/output.log 2&gt;&amp;1<\/span><\/pre>\n<p>Or, to discard all output entirely:<\/p>\n<pre><span class=\"lang:default decode:true crayon-inline\">*\/5 * * * * a_script_producing_a_lot_of_unwanted_output.sh &gt; \/dev\/null 2&gt;&amp;1<\/span><\/pre>\n<p>&nbsp;<\/p>\n<ul data-start=\"2087\" data-end=\"3130\">\n<li data-start=\"2087\" data-end=\"2323\">\n<p data-start=\"2089\" data-end=\"2128\">Disable all cron email<\/p>\n<\/li>\n<\/ul>\n<p>Add this line at the top of your crontab:<\/p>\n<pre><span class=\"lang:default decode:true crayon-inline\">MAILTO=\"\"<\/span>\r\n\r\n<\/pre>\n<p>&nbsp;<\/p>\n<h3 data-start=\"3137\" data-end=\"3162\">Environment &amp; paths<\/h3>\n<p data-start=\"3164\" data-end=\"3218\">Cron jobs run in a minimal environment. In particular:<\/p>\n<ul data-start=\"3220\" data-end=\"3595\">\n<li data-start=\"3220\" data-end=\"3308\">\n<p data-start=\"3222\" data-end=\"3308\">Standard environment variables (PATH, user profile config, etc.) may <strong data-start=\"3291\" data-end=\"3298\">not<\/strong> be set.<\/p>\n<\/li>\n<li data-start=\"3309\" data-end=\"3368\">\n<p data-start=\"3311\" data-end=\"3368\">Always use <strong data-start=\"3322\" data-end=\"3340\">absolute paths<\/strong> for commands and scripts.<\/p>\n<\/li>\n<li data-start=\"3369\" data-end=\"3595\">\n<p data-start=\"3371\" data-end=\"3595\">If your script depends on environment variables (e.g. paths, virtual environments, modules), it\u2019s better to define them explicitly rather than relying on sourcing your shell profile.<\/p>\n<\/li>\n<\/ul>\n<p data-start=\"3597\" data-end=\"3626\">Example (less recommended):<\/p>\n<pre><span class=\"lang:default decode:true crayon-inline\">*\/5 * * * * . $HOME\/.bashrc; . $HOME\/profile; \/path\/to\/your\/script.sh &gt;&gt; $HOME\/cronjob_outputs\/output.log 2&gt;&amp;1<\/span><\/pre>\n<p data-start=\"3731\" data-end=\"3907\">Better:<br data-start=\"3738\" data-end=\"3741\" \/>Make a script that defines exactly what it needs, with full paths \u2014 this reduces the risk of failures if your profile changes. You can also combine multiple commands in one cron job by separating them with semicolons.<\/p>\n<p>&nbsp;<\/p>\n<h3 data-start=\"4046\" data-end=\"4077\">Good practices &amp; cautions<\/h3>\n<ul data-start=\"4079\" data-end=\"4847\">\n<li data-start=\"4079\" data-end=\"4217\">\n<p data-start=\"4081\" data-end=\"4217\"><strong data-start=\"4081\" data-end=\"4121\">Don\u2019t rely on cron emails for output<\/strong> \u2014 redirect to log files or \/dev\/null if not needed.<\/p>\n<\/li>\n<li data-start=\"4218\" data-end=\"4339\">\n<p data-start=\"4220\" data-end=\"4339\"><strong data-start=\"4220\" data-end=\"4258\">Define your environment explicitly<\/strong>: avoid sourcing broad profile scripts.<\/p>\n<\/li>\n<li data-start=\"4340\" data-end=\"4475\">\n<p data-start=\"4342\" data-end=\"4475\"><strong data-start=\"4342\" data-end=\"4392\">Make sure your scripts have proper permissions<\/strong> and are owned by you.<\/p>\n<\/li>\n<li data-start=\"4476\" data-end=\"4638\">\n<p data-start=\"4478\" data-end=\"4638\"><strong data-start=\"4478\" data-end=\"4505\">Log and audit cron jobs<\/strong>: keep a record of what runs when and why. That helps with maintenance and troubleshooting.<\/p>\n<\/li>\n<li data-start=\"4639\" data-end=\"4847\">\n<p data-start=\"4641\" data-end=\"4847\"><strong data-start=\"4641\" data-end=\"4676\">Be mindful of cluster resources<\/strong> \u2014 if your cron job submits batch tasks, treat them like any other cluster job (they may queue, consume compute resources, etc.).<\/p>\n<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Overview  The Reading Academic Computing Cluster (RACC2) provides a dedicated cron-job node. This means you can schedule recurring tasks in the same environment used by other research computing applications. If a command works on a login node, it will also work on the cronjob node \u2014 including the ability to submit batch jobs. However,<\/p>\n","protected":false},"author":361,"featured_media":2427,"template":"","meta":{"_acf_changed":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"__cvm_playback_settings":[],"__cvm_video_id":"","_links_to":"","_links_to_target":""},"kbe_taxonomy":[61],"kbe_tags":[],"class_list":["post-2387","kbe_knowledgebase","type-kbe_knowledgebase","status-publish","has-post-thumbnail","hentry","kbe_taxonomy-academic-cluster-articles"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v21.8.1 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Cronjobs on the Academic Computing Cluster - Academic Computing Team<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/research.reading.ac.uk\/act\/knowledgebase\/cronjobs-on-the-academic-computing-cluster\/\" \/>\n<meta property=\"og:locale\" content=\"en_GB\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Cronjobs on the Academic Computing Cluster - Academic Computing Team\" \/>\n<meta property=\"og:description\" content=\"Overview The Reading Academic Computing Cluster (RACC2) provides a dedicated cron-job node. This means you can schedule recurring tasks in the same environment used by other research computing applications. If a command works on a login node, it will also work on the cronjob node \u2014 including the ability to submit batch jobs. However,\" \/>\n<meta property=\"og:url\" content=\"https:\/\/research.reading.ac.uk\/act\/knowledgebase\/cronjobs-on-the-academic-computing-cluster\/\" \/>\n<meta property=\"og:site_name\" content=\"Academic Computing Team\" \/>\n<meta property=\"article:modified_time\" content=\"2025-11-28T14:45:30+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/research.reading.ac.uk\/act\/wp-content\/uploads\/sites\/2\/Unorganized\/alarm_clock_black_T.png\" \/>\n\t<meta property=\"og:image:width\" content=\"388\" \/>\n\t<meta property=\"og:image:height\" content=\"360\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Estimated reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"3 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/research.reading.ac.uk\/act\/knowledgebase\/cronjobs-on-the-academic-computing-cluster\/\",\"url\":\"https:\/\/research.reading.ac.uk\/act\/knowledgebase\/cronjobs-on-the-academic-computing-cluster\/\",\"name\":\"Cronjobs on the Academic Computing Cluster - Academic Computing Team\",\"isPartOf\":{\"@id\":\"https:\/\/research.reading.ac.uk\/act\/#website\"},\"datePublished\":\"2018-11-23T15:43:04+00:00\",\"dateModified\":\"2025-11-28T14:45:30+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/research.reading.ac.uk\/act\/knowledgebase\/cronjobs-on-the-academic-computing-cluster\/#breadcrumb\"},\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/research.reading.ac.uk\/act\/knowledgebase\/cronjobs-on-the-academic-computing-cluster\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/research.reading.ac.uk\/act\/knowledgebase\/cronjobs-on-the-academic-computing-cluster\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/research.reading.ac.uk\/act\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Knowledgebase\",\"item\":\"https:\/\/research.reading.ac.uk\/act\/knowledgebase\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Cronjobs on the Academic Computing Cluster\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/research.reading.ac.uk\/act\/#website\",\"url\":\"https:\/\/research.reading.ac.uk\/act\/\",\"name\":\"Academic Computing Team\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/research.reading.ac.uk\/act\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/research.reading.ac.uk\/act\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-GB\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/research.reading.ac.uk\/act\/#organization\",\"name\":\"University of Reading\",\"url\":\"https:\/\/research.reading.ac.uk\/act\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\/\/research.reading.ac.uk\/act\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/research.reading.ac.uk\/act\/wp-content\/uploads\/sites\/2\/2017\/08\/cropped-University_of_Reading_shield-1.png\",\"contentUrl\":\"https:\/\/research.reading.ac.uk\/act\/wp-content\/uploads\/sites\/2\/2017\/08\/cropped-University_of_Reading_shield-1.png\",\"width\":512,\"height\":512,\"caption\":\"University of Reading\"},\"image\":{\"@id\":\"https:\/\/research.reading.ac.uk\/act\/#\/schema\/logo\/image\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Cronjobs on the Academic Computing Cluster - Academic Computing Team","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/research.reading.ac.uk\/act\/knowledgebase\/cronjobs-on-the-academic-computing-cluster\/","og_locale":"en_GB","og_type":"article","og_title":"Cronjobs on the Academic Computing Cluster - Academic Computing Team","og_description":"Overview The Reading Academic Computing Cluster (RACC2) provides a dedicated cron-job node. This means you can schedule recurring tasks in the same environment used by other research computing applications. If a command works on a login node, it will also work on the cronjob node \u2014 including the ability to submit batch jobs. However,","og_url":"https:\/\/research.reading.ac.uk\/act\/knowledgebase\/cronjobs-on-the-academic-computing-cluster\/","og_site_name":"Academic Computing Team","article_modified_time":"2025-11-28T14:45:30+00:00","og_image":[{"width":388,"height":360,"url":"https:\/\/research.reading.ac.uk\/act\/wp-content\/uploads\/sites\/2\/Unorganized\/alarm_clock_black_T.png","type":"image\/png"}],"twitter_card":"summary_large_image","twitter_misc":{"Estimated reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/research.reading.ac.uk\/act\/knowledgebase\/cronjobs-on-the-academic-computing-cluster\/","url":"https:\/\/research.reading.ac.uk\/act\/knowledgebase\/cronjobs-on-the-academic-computing-cluster\/","name":"Cronjobs on the Academic Computing Cluster - Academic Computing Team","isPartOf":{"@id":"https:\/\/research.reading.ac.uk\/act\/#website"},"datePublished":"2018-11-23T15:43:04+00:00","dateModified":"2025-11-28T14:45:30+00:00","breadcrumb":{"@id":"https:\/\/research.reading.ac.uk\/act\/knowledgebase\/cronjobs-on-the-academic-computing-cluster\/#breadcrumb"},"inLanguage":"en-GB","potentialAction":[{"@type":"ReadAction","target":["https:\/\/research.reading.ac.uk\/act\/knowledgebase\/cronjobs-on-the-academic-computing-cluster\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/research.reading.ac.uk\/act\/knowledgebase\/cronjobs-on-the-academic-computing-cluster\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/research.reading.ac.uk\/act\/"},{"@type":"ListItem","position":2,"name":"Knowledgebase","item":"https:\/\/research.reading.ac.uk\/act\/knowledgebase\/"},{"@type":"ListItem","position":3,"name":"Cronjobs on the Academic Computing Cluster"}]},{"@type":"WebSite","@id":"https:\/\/research.reading.ac.uk\/act\/#website","url":"https:\/\/research.reading.ac.uk\/act\/","name":"Academic Computing Team","description":"","publisher":{"@id":"https:\/\/research.reading.ac.uk\/act\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/research.reading.ac.uk\/act\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-GB"},{"@type":"Organization","@id":"https:\/\/research.reading.ac.uk\/act\/#organization","name":"University of Reading","url":"https:\/\/research.reading.ac.uk\/act\/","logo":{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/research.reading.ac.uk\/act\/#\/schema\/logo\/image\/","url":"https:\/\/research.reading.ac.uk\/act\/wp-content\/uploads\/sites\/2\/2017\/08\/cropped-University_of_Reading_shield-1.png","contentUrl":"https:\/\/research.reading.ac.uk\/act\/wp-content\/uploads\/sites\/2\/2017\/08\/cropped-University_of_Reading_shield-1.png","width":512,"height":512,"caption":"University of Reading"},"image":{"@id":"https:\/\/research.reading.ac.uk\/act\/#\/schema\/logo\/image\/"}}]}},"_links":{"self":[{"href":"https:\/\/research.reading.ac.uk\/act\/wp-json\/wp\/v2\/kbe_knowledgebase\/2387","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/research.reading.ac.uk\/act\/wp-json\/wp\/v2\/kbe_knowledgebase"}],"about":[{"href":"https:\/\/research.reading.ac.uk\/act\/wp-json\/wp\/v2\/types\/kbe_knowledgebase"}],"author":[{"embeddable":true,"href":"https:\/\/research.reading.ac.uk\/act\/wp-json\/wp\/v2\/users\/361"}],"version-history":[{"count":12,"href":"https:\/\/research.reading.ac.uk\/act\/wp-json\/wp\/v2\/kbe_knowledgebase\/2387\/revisions"}],"predecessor-version":[{"id":7947,"href":"https:\/\/research.reading.ac.uk\/act\/wp-json\/wp\/v2\/kbe_knowledgebase\/2387\/revisions\/7947"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/research.reading.ac.uk\/act\/wp-json\/wp\/v2\/media\/2427"}],"wp:attachment":[{"href":"https:\/\/research.reading.ac.uk\/act\/wp-json\/wp\/v2\/media?parent=2387"}],"wp:term":[{"taxonomy":"kbe_taxonomy","embeddable":true,"href":"https:\/\/research.reading.ac.uk\/act\/wp-json\/wp\/v2\/kbe_taxonomy?post=2387"},{"taxonomy":"kbe_tags","embeddable":true,"href":"https:\/\/research.reading.ac.uk\/act\/wp-json\/wp\/v2\/kbe_tags?post=2387"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}