{"id":3059,"date":"2026-08-30T22:15:25","date_gmt":"2026-08-31T02:15:25","guid":{"rendered":"https:\/\/csimmons.dev\/blog\/?p=3059"},"modified":"2026-08-30T22:16:21","modified_gmt":"2026-08-31T02:16:21","slug":"repairing-scheduled-tasks-after-a-coldfusion-migration","status":"publish","type":"post","link":"https:\/\/csimmons.dev\/blog\/2026\/08\/repairing-scheduled-tasks-after-a-coldfusion-migration\/","title":{"rendered":"Repairing Scheduled Tasks After a ColdFusion Migration"},"content":{"rendered":"<p>I recently ran into an issue with scheduled tasks after migrating an Adobe ColdFusion 2021 server to ColdFusion 2023. The server-level scheduled tasks were present in the ColdFusion Administrator, but none of them could be edited.<\/p>\n<p>Every attempt to save a task resulted in this error:<\/p>\n<figure id=\"attachment_3061\" aria-describedby=\"caption-attachment-3061\" style=\"width: 966px\" class=\"wp-caption alignnone\"><img width=\"976\" height=\"226\" data-public-id=\"coldfusion-scheduled-task-invalid-extension\/coldfusion-scheduled-task-invalid-extension.png\" loading=\"lazy\" decoding=\"async\" class=\"wp-post-3059 wp-image-3061 size-full\" src=\"https:\/\/res.cloudinary.com\/ccsimmons\/images\/w_976,h_226,c_scale\/f_auto,q_auto\/v1788142118\/coldfusion-scheduled-task-invalid-extension\/coldfusion-scheduled-task-invalid-extension.png?_i=AA\" alt=\"ColdFusion scheduled task invalid extension\" data-format=\"png\" data-transformations=\"f_auto,q_auto\" data-version=\"1788142118\" data-seo=\"1\" srcset=\"https:\/\/res.cloudinary.com\/ccsimmons\/images\/f_auto,q_auto\/v1788142118\/coldfusion-scheduled-task-invalid-extension\/coldfusion-scheduled-task-invalid-extension.png?_i=AA 976w, https:\/\/res.cloudinary.com\/ccsimmons\/images\/w_300,h_69,c_scale\/f_auto,q_auto\/v1788142118\/coldfusion-scheduled-task-invalid-extension\/coldfusion-scheduled-task-invalid-extension.png?_i=AA 300w, https:\/\/res.cloudinary.com\/ccsimmons\/images\/w_768,h_178,c_scale\/f_auto,q_auto\/v1788142118\/coldfusion-scheduled-task-invalid-extension\/coldfusion-scheduled-task-invalid-extension.png?_i=AA 768w\" sizes=\"auto, (max-width: 976px) 100vw, 976px\" \/><figcaption id=\"caption-attachment-3061\" class=\"wp-caption-text\">ColdFusion scheduled task invalid extension<\/figcaption><\/figure>\n<h2>Troubleshooting the Error<\/h2>\n<p>I found an old <a href=\"https:\/\/community.adobe.com\/questions-582\/when-defining-a-new-scheduled-task-to-save-the-output-of-a-cfm-file-as-htm-i-get-an-error-270960\">Adobe Community thread describing the same error<\/a>. In that case, the scheduled task was supposed to save its output as an HTML file. The suggested solution was to stop ColdFusion, back up <code>neo-cron.xml<\/code>, add the desired extension to its list of allowed output-file extensions, and restart ColdFusion.<\/p>\n<p>That solution made sense for a task that was intentionally producing a file, but none of my scheduled tasks were configured to save their output.<\/p>\n<p>I also found a <a href=\"https:\/\/community.adobe.com\/questions-582\/scheduled-tasks-not-saving-changes-coldfusion2021-276968\">more recent discussion about scheduled tasks not saving changes in ColdFusion 2021<\/a>. That thread covers an additional security requirement: when a scheduled task is configured to save its output to a file, the output directory may need to be whitelisted under <code>schedulerexecutionpaths<\/code> in <code>pathfilter.json<\/code>.<\/p>\n<p>Again, since I was not generating output, this was a dead end.<\/p>\n<p>The original <code>neo-cron.xml<\/code> backup still contained the task definitions I needed, so I tried another approach. I cleared the scheduled tasks on the new server in the ColdFusion Administrator and used CommandBox&#8217;s CFConfig module to import only the scheduled-task settings:<\/p>\n<pre class=\"wp-block-code\"><code>cfconfig import from=cf2021-export.json to=cf2023-server includeList=scheduledTasks<\/code><\/pre>\n<p>The <code>includeList<\/code> limited the import to the scheduled tasks. They were recreated, but I still could not edit them.<\/p>\n<p>I created a new test task and confirmed that I could save and edit it. That worked, but recreating all of the scheduled tasks manually would have been tedious and would have made it easy to miss a URL, schedule, credential, proxy setting, or paused state.<\/p>\n<h2>A New Tool: Scheduled Task Repair<\/h2>\n<p>I wanted a safer way to inspect the backup, compare it with the current scheduler, and choose exactly which tasks to rebuild.<\/p>\n<p>I put together a small utility called <a href=\"https:\/\/github.com\/ccsimmons\/scheduled-task-repair\">Scheduled Task Repair<\/a> to do exactly that.<\/p>\n<p>Instead of importing the scheduler configuration back into ColdFusion, the utility reads the task definitions and rebuilds the selected tasks using <code>&lt;cfschedule&gt;<\/code>.<\/p>\n<h2>What It Does<\/h2>\n<p>Scheduled Task Repair provides a browser-based interface for uploading and reviewing a <code>neo-cron.xml<\/code> file.<\/p>\n<p>The utility can:<\/p>\n<ul>\n<li>Parse and validate server-level scheduled tasks<\/li>\n<li>Display the tasks before making any changes<\/li>\n<li>Select individual tasks to restore<\/li>\n<li>Preserve supported authentication, proxy, publication, retry, and paused-state settings<\/li>\n<li>Show the currently configured server tasks<\/li>\n<li>Identify possible matches by group and task name<\/li>\n<li>Compare current and imported settings side by side<\/li>\n<li>Optionally clear the existing tasks before rebuilding them<\/li>\n<\/ul>\n<p>Uploading the file is read-only. Nothing is created, updated, paused, or deleted until the tasks have been reviewed and submitted.<\/p>\n<p>Clearing the existing tasks is also optional and requires an additional confirmation.<\/p>\n<h2>Requirements<\/h2>\n<p>The utility requires:<\/p>\n<ul>\n<li>Adobe ColdFusion 2023 or 2025 (both tested)<\/li>\n<li>The Adobe ColdFusion Scheduler package<\/li>\n<li>Permission to manage server-level scheduled tasks<\/li>\n<li>A browser with cookies enabled<\/li>\n<\/ul>\n<p>The interface uses Bootstrap from jsDelivr, so the browser also needs access to the CDN.<\/p>\n<h2>Installation<\/h2>\n<p>Download <code>scheduled-task-repair.zip<\/code> from the <a href=\"https:\/\/github.com\/ccsimmons\/scheduled-task-repair\/releases\/latest\">latest Scheduled Task Repair release<\/a>.<\/p>\n<p>Extract the archive into a temporarily accessible ColdFusion webroot and open the directory in a browser.<\/p>\n<p>By default, access is restricted to:<\/p>\n<pre class=\"wp-block-code\"><code>127.0.0.1\n::1<\/code><\/pre>\n<p>To access it from another workstation, add the appropriate workstation or VPN address to <code>this.allowedRemoteAddresses<\/code> in <code>Application.cfc<\/code>.<\/p>\n<p>The utility does not provide its own authentication system. It should be protected using an existing web server, reverse proxy, VPN, or application authentication layer.<\/p>\n<h2>Using the Utility<\/h2>\n<p>Before beginning, back up the current ColdFusion scheduler configuration.<\/p>\n<p>Open the utility and confirm that it can list the current server tasks. Upload the <code>neo-cron.xml<\/code> backup and review the parsed results.<\/p>\n<figure id=\"attachment_3063\" aria-describedby=\"caption-attachment-3063\" style=\"width: 1014px\" class=\"wp-caption alignnone\"><img width=\"1024\" height=\"782\" data-public-id=\"scheduled-task-repair-upload\/scheduled-task-repair-upload.png\" loading=\"lazy\" decoding=\"async\" class=\"wp-post-3059 wp-image-3063 size-large\" src=\"https:\/\/res.cloudinary.com\/ccsimmons\/images\/w_1024,h_782,c_scale\/f_auto,q_auto\/v1788142132\/scheduled-task-repair-upload\/scheduled-task-repair-upload.png?_i=AA\" alt=\"Scheduled task repair upload\" data-format=\"png\" data-transformations=\"f_auto,q_auto\" data-version=\"1788142132\" data-seo=\"1\" srcset=\"https:\/\/res.cloudinary.com\/ccsimmons\/images\/f_auto,q_auto\/v1788142132\/scheduled-task-repair-upload\/scheduled-task-repair-upload.png?_i=AA 1440w, https:\/\/res.cloudinary.com\/ccsimmons\/images\/w_300,h_229,c_scale\/f_auto,q_auto\/v1788142132\/scheduled-task-repair-upload\/scheduled-task-repair-upload.png?_i=AA 300w, https:\/\/res.cloudinary.com\/ccsimmons\/images\/w_1024,h_782,c_scale\/f_auto,q_auto\/v1788142132\/scheduled-task-repair-upload\/scheduled-task-repair-upload.png?_i=AA 1024w, https:\/\/res.cloudinary.com\/ccsimmons\/images\/w_768,h_587,c_scale\/f_auto,q_auto\/v1788142132\/scheduled-task-repair-upload\/scheduled-task-repair-upload.png?_i=AA 768w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption id=\"caption-attachment-3063\" class=\"wp-caption-text\">Scheduled task repair upload<\/figcaption><\/figure>\n<figure class=\"wp-block-image size-full\"><\/figure>\n<p>Tasks marked <strong>Valid<\/strong> contain the required fields and supported values needed to attempt restoration. This does not guarantee that a task URL is reachable or that the task will run successfully.<\/p>\n<p>A task marked <strong>Possible Match<\/strong> has the same group and task name as an existing task. Clicking the badge displays the current and imported settings side by side.<\/p>\n<figure id=\"attachment_3062\" aria-describedby=\"caption-attachment-3062\" style=\"width: 973px\" class=\"wp-caption alignnone\"><img width=\"983\" height=\"1024\" data-public-id=\"scheduled-task-repair-review\/scheduled-task-repair-review.png\" loading=\"lazy\" decoding=\"async\" class=\"wp-post-3059 wp-image-3062 size-large\" src=\"https:\/\/res.cloudinary.com\/ccsimmons\/images\/w_983,h_1024,c_scale\/f_auto,q_auto\/v1788142127\/scheduled-task-repair-review\/scheduled-task-repair-review.png?_i=AA\" alt=\"Scheduled task repair review\" data-format=\"png\" data-transformations=\"f_auto,q_auto\" data-version=\"1788142127\" data-seo=\"1\" srcset=\"https:\/\/res.cloudinary.com\/ccsimmons\/images\/w_983,h_1024,c_scale\/f_auto,q_auto\/v1788142127\/scheduled-task-repair-review\/scheduled-task-repair-review.png?_i=AA 983w, https:\/\/res.cloudinary.com\/ccsimmons\/images\/w_288,h_300,c_scale\/f_auto,q_auto\/v1788142127\/scheduled-task-repair-review\/scheduled-task-repair-review.png?_i=AA 288w, https:\/\/res.cloudinary.com\/ccsimmons\/images\/w_768,h_800,c_scale\/f_auto,q_auto\/v1788142127\/scheduled-task-repair-review\/scheduled-task-repair-review.png?_i=AA 768w, https:\/\/res.cloudinary.com\/ccsimmons\/images\/f_auto,q_auto\/v1788142127\/scheduled-task-repair-review\/scheduled-task-repair-review.png?_i=AA 1440w\" sizes=\"auto, (max-width: 983px) 100vw, 983px\" \/><figcaption id=\"caption-attachment-3062\" class=\"wp-caption-text\">Scheduled task repair review<\/figcaption><\/figure>\n<p>Select the tasks to restore and submit the form. If a task was paused in the original backup, the utility pauses it again after restoration.<\/p>\n<h2>A Few Security Notes<\/h2>\n<p>A real <code>neo-cron.xml<\/code> file may contain internal URLs, usernames, passwords, and proxy credentials. Do not commit one to source control or include it in a public release.<\/p>\n<p>Scheduled Task Repair performs privileged scheduler operations. It should only be available for the duration of the repair and removed from the webroot afterward.<\/p>\n<p>The source code, installation package, and additional documentation are available on <a href=\"https:\/\/github.com\/ccsimmons\/scheduled-task-repair\">GitHub<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>I recently ran into an issue with scheduled tasks after migrating an Adobe ColdFusion 2021 server to ColdFusion 2023. The server-level scheduled tasks were present in the ColdFusion Administrator, but none of them could be edited. Every attempt to save a task resulted in this error: Troubleshooting the Error I found an old Adobe Community &#8230; <a title=\"Repairing Scheduled Tasks After a ColdFusion Migration\" class=\"read-more\" href=\"https:\/\/csimmons.dev\/blog\/2026\/08\/repairing-scheduled-tasks-after-a-coldfusion-migration\/\" aria-label=\"Read more about Repairing Scheduled Tasks After a ColdFusion Migration\">Read more<\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_exactmetrics_skip_tracking":false,"_cloudinary_featured_overwrite":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[68],"tags":[48],"class_list":["post-3059","post","type-post","status-publish","format-standard","hentry","category-developer","tag-coldfusion"],"jetpack_shortlink":"https:\/\/wp.me\/pbVg43-Nl","jetpack_sharing_enabled":true,"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/csimmons.dev\/blog\/wp-json\/wp\/v2\/posts\/3059","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/csimmons.dev\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/csimmons.dev\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/csimmons.dev\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/csimmons.dev\/blog\/wp-json\/wp\/v2\/comments?post=3059"}],"version-history":[{"count":0,"href":"https:\/\/csimmons.dev\/blog\/wp-json\/wp\/v2\/posts\/3059\/revisions"}],"wp:attachment":[{"href":"https:\/\/csimmons.dev\/blog\/wp-json\/wp\/v2\/media?parent=3059"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/csimmons.dev\/blog\/wp-json\/wp\/v2\/categories?post=3059"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/csimmons.dev\/blog\/wp-json\/wp\/v2\/tags?post=3059"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}