April 2, 2021 By Henrik Loeser 4 min read

How to set up scheduled tasks on IBM Cloud.

A few weeks ago, I stumbled over one of my private blog posts from 2015. It discusses kicking off activities using time-based, cron-like scheduling — all done in Python on Bluemix with Cloud Foundry. 

It is not just the name Bluemix which is dated (small pun). Since then, it has transformed into IBM Cloud Platform and has added serverless compute options like IBM Cloud Functions (OpenWhisk) and, more recently, IBM Cloud Code Engine. Both of them support “eventing” — event-based execution of code. Both also support Python code and many other programming languages like Node.js, Go (Golang), PHP and more. So, what does it take to set up cron-like scheduling? Not much.

In the following, I am going to provide a quick introduction into cron. Thereafter, I am taking the scenario of scheduled tweets (see screenshot below) to showcase cron-like events in Code Engine and Cloud Functions. The code is available on GitHub:

Twitterbot with scheduled tweets.


The utility cron is a time-based scheduler for tasks (jobs) on UNIX/Linux systems. Events are specified by providing a set of values for minute, hour, day of the month, month and day of the week. Values are either an explicit number, a comma-separated list of numbers or the wildcard “*”.

20 4,9,13,18 * * 1,3,5

The above would cause an event at 20 minutes past the hour at 4 am, 9 am, 1 pm and 6 pm (i.e., at 04:20, 09:20, 13:20 and 18:20). The event would only happen on Mondays (1), Wednesdays (3) and Fridays (5).

Alarms and pings

Cloud Functions features several built-in packages, and some of them provide events. One of them is the alarm package — it allows you to set up time-based triggers. A trigger can be associated with a Functions action by a rule. That way, an event can trigger multiple actions.

Code Engine has event producers, too. A so-called ping subscription serves for cron-like time events. Subscriptions are directly associated with a destination (app) and a path.

Aaaand: Action!

Knowing the concepts of cron, Cloud Functions triggers and rules and Code Engine ping subscriptions, it is time for some fun and action. I am using a simple Twitterbot which I wrote in Go (Golang) and deployed as Code Engine app (Application in the diagram below). The app tweets a message like the one shown above when invoked, with the content coming from a blog feed (RSS/Atom). The bot has some default values for the blog feed to use and how the tweet should be composed. But, it also allows customization as part of the payload when invoked:

Architecture for cron-scheduled tweets.

The Twitterbot is called from a Code Engine ping subscription which was created similar to this:

ibmcloud ce sub ping create -n tweety --destination twitterbot --path /tweet --data

'{"secret_key":"SET_YOUR_SECRET","tweet_string2":"Written in #Golang by @data_henrik and running on #IBMCloud #CodeEngine"}' --content-type 'application/json' --schedule '07 9,17 * * *'

The destination is the twitterbot at the path /tweet. The data to pass in (payload) in JSON format has a key/value pair for a shared secret to secure the API. The second key/value is tweet_string2 to customize the Twitter status message. The bot is called twice daily at 09:07 UTC and 17:07 UTC.

I also created a Cloud Functions action showing a generic “dispatcher.” The action decodes incoming parameters and reacts to them. In the sample scenario, it sets up a POST request to the Twitterbot and passes on the included payload. The payload is specified as part of the trigger definition:

ibmcloud fn trigger create cf_tweety --feed /whisk.system/alarms/alarm --param cron "22 10 * * *" 
--param trigger_payload '{"CE_TWEET": { "url":"https://twitterbot.xxxxxxxxxx.us-south.codeengine.appdomain.cloud/tweet", "payload":{"secret_key":"SET_YOUR_SECRET","tweet_string2":"Triggered by #OpenWhisk and dispatched in #Python on #IBMCloud" }}}'

The above trigger fires at 10:22 UTC daily. The trigger_payload includes the configuration for the Code Engine tweet (CE_TWEET). It is the URI to invoke with a POST request and the actual payload to pass. The latter is the secret_key and a tweet_string2 again. To associate the trigger with the dispatch action, we need a rule like this:

ibmcloud fn rule create myTweetRule cf_tweety dispatch


Since my early tests with Python scheduling, it has become much, much simpler to set up cron-like scheduling. IBM Cloud offers IBM Cloud Functions and IBM Cloud Code Engine as serverless compute options, each of them with eventing functionality. Both support the standard cron syntax for time events and allow you to execute your tasks directly or use them as wrapper for something different. This could be calls into webhooks or the invocation of other functions, apps or jobs to perform administrative or housekeeping tasks and more.

The code for the Twitterbot and the dispatch function is available on GitHub.

Check out this IBM Cloud solution tutorial on serverless web app and eventing for data retrieval and analytics.

If you have feedback, suggestions, or questions about this post, please reach out to me on Twitter (@data_henrik) or LinkedIn.

Was this article helpful?

More from Cloud

IBM Cloud Virtual Servers and Intel launch new custom cloud sandbox

4 min read - A new sandbox that use IBM Cloud Virtual Servers for VPC invites customers into a nonproduction environment to test the performance of 2nd Gen and 4th Gen Intel® Xeon® processors across various applications. Addressing performance concerns in a test environment Performance testing is crucial to understanding the efficiency of complex applications inside your cloud hosting environment. Yes, even in managed enterprise environments like IBM Cloud®. Although we can deliver the latest hardware and software across global data centers designed for…

10 industries that use distributed computing

6 min read - Distributed computing is a process that uses numerous computing resources in different operating locations to mimic the processes of a single computer. Distributed computing assembles different computers, servers and computer networks to accomplish computing tasks of widely varying sizes and purposes. Distributed computing even works in the cloud. And while it’s true that distributed cloud computing and cloud computing are essentially the same in theory, in practice, they differ in their global reach, with distributed cloud computing able to extend…

How a US bank modernized its mainframe applications with IBM Consulting and Microsoft Azure

9 min read - As organizations strive to stay ahead of the curve in today's fast-paced digital landscape, mainframe application modernization has emerged as a critical component of any digital transformation strategy. In this blog, we'll discuss the example of a US bank which embarked on a journey to modernize its mainframe applications. This strategic project has helped it to transform into a more modern, flexible and agile business. In looking at the ways in which it approached the problem, you’ll gain insights into…

IBM Newsletters

Get our newsletters and topic updates that deliver the latest thought leadership and insights on emerging trends.
Subscribe now More newsletters