Wednesday, November 16, 2022

How I manage SetCronJob servers

In the past few months, I've been working on rebuilding Clustermin to help me manage multiple servers and deploy SetCronJob to DigitalOcean servers.

Six years ago, I created Clustermin and made it into a shell script storage. All server installation and configuration commands were stored as Twig bash scripts in the database. Then they were run on one or multiple servers on-demand and on webhook requests.

It worked fine for years, but it couldn't catch up with my needs.

The framework and libraries it was built on became too old and deprecated. I need to either do a big upgrade or try alternative solutions.

So I tried RunCloud, Cleavr, and Laravel Forge. I couldn't even get them to deploy SetCronJob to one server.

Then I used Ploi for a few months for my side project, and it worked great. With a nice user interface, too.

But it's limited. Everything is at the server level. If I need to add another server to the group, it takes a lot of work. Add a site, add multiple cronjobs, add daemons, add a new SSH key to my Bitbucket repo, etc. Many necessary features are behind a paywall too.

So, I decided to rebuild my old project Clustermin.

The web server cluster

Currently, these features are already implemented:

Cluster management (cluster = group of servers)

Most things are at the cluster level. Add a site to a cluster, and it'll be deployed to all servers. Add a server to a cluster, and it deploys all sites along with their cronjobs, daemons, and SSL certificates. If a server cluster is too early for you, just add one server and that's it.

Server installation and configuration

Services installed and monitored

Your servers will have PHP 8.1, Nginx, Redis, Memcached, and Supervisor, ready to deploy Symfony/Laravel/PHP apps.

Push to deploy, zero downtime

You'll get a deploy URL to add to your Git repo's webhook. It'll deploy your site to multiple servers, one by one, and stops if it encounters any problem with deployment. It uses an atomic switch with symlink switching, so no PHP FPM reload (and downtime) is needed.

Server status and service status monitoring

Clustermin monitors your server CPU, RAM, and disk usage every minute, as well as system service status (cron, nginx, supervisor, php8.1-fpm, redis-server, ufw, ssh, fail2ban, etc).

SSL certificates management

Free Let's encrypt SSL certificates will be deployed to all servers with just one click. You can also add your own SSL certificates too.

File manager

File manager

One of the most used features in the previous version of Clustermin. It's really handy when you need to quickly check your files and see what the heck happened with your deployment.

Redis master-replica cluster

You can also deploy a Redis cluster too. Clustermin supports master-replica setup only. When a new server is added to the Redis cluster, it'll automatically replicate the current primary server. I intend to add other types of server clusters soo (e.g. load balancer, database cluster, etc).


If you're interested in Clustermin, you can register an account here. Currently, it's free for up to 4GB total server memory (e.g. 4 small servers with 1GB RAM are free).

Monday, July 11, 2022

SetCronJob July 2022 Update


Here are some changes and updates at SetCronJob in July 2022:

New servers are added

As announced a month ago, 6 new servers are processing your cronjobs right now. If you haven't added the new IP addresses to your firewall's whitelist, you should do it now.


Menu and forms and updated

I've replaced the Account menu with the My Profile menu and expanded all forms so you can now update your name, email and password much faster. Please note that the API token displayed is for your own account. If you want to get the API token to manage your team's cronjobs, please contact the account owner to get one.


Account deletion

You can now delete your own account completely. All data will be removed. It's not reversible. You will be able to register again using the same email address.


Team invitation

An invitation is sent to your new team member.

Previously, a team member must register their account first before they can be added to a team. Now the team owner/admins can just add a new email address, and they'll invite a new team member to join their team account. The new team member just needs to confirm their email, and they'll be authenticated and authorized to use the team account immediately.


Monthly subscription

You can now create a monthly subscription. It'll be 1/10 the price of a yearly subscription. At the Billing tab, click Monthly pricing and Choose this plan.

The remaining days will decrease if you switch from yearly to monthly billing.

Saturday, June 11, 2022

6 new servers added


I've added 6 new servers to process cronjobs. They will start sending HTTP requests to your cronjob URLs from July 11, 2022 (in 1 month).

If you are using a firewall, please make sure our IP addresses are whitelisted. Here's the list of new IP addresses:

And IPv6 addresses:


You can always check the up-to-date IP list here.

If you want to receive email notifications when SetCronJob's IP changes, please click on your profile widget > Profile, click Update profile, and check the box Receive email notifications about SetCronJob IP change.

Wednesday, April 20, 2022

Renew your account by card / PayPal


You can now create a subscription to automatically renew your account by card / PayPal. The payments will be processed by Paddle, a merchant of record. Paddle will handle all the payments, taxes, receipts, and invoices. They'll also send email notifications about upcoming charges, failed payments, etc.

You can now update your account plan at any time without changing your payment method. Both SetCronJob and Paddle will prorate the subscription costs, and you can see when the next payment date is when you update your account plan.

You can no longer make one-time payments on our website via PayPal or FastSpring. However, SetCronJob still supports WebMoney, PayPal, BitCoin, and USDT. Please contact me if you want to make manual payments.

Existing PayPal subscriptions will be kept intact. If the PayPal subscription is canceled, you can only create new ones via Paddle.

If you encounter any problems with SetCronJob, please let me know.

Best regards,
Nguyen An Thuan.

Sunday, March 20, 2022

SetCronJob March 2022 update

 Hello there,

You may notice that the web user interface at SetCronJob has changed. I have made multiple updates in both backend and frontend, mainly in upgrading our libraries/framework.

There will also be multiple changes from here on. Here is the list of changes you should know:

Compromised Passwords check

I've added another check when registering and changing your account password. It will ensure that your password is not included in any of the public data breaches tracked by haveibeenpwned. It won't send your raw passwords, only some first bytes of the hashed password will be checked.

Email confirmation is now required

I allowed unverified users to test our service before confirming their email addresses. However, it confused users; some even hadn't confirmed their email address before paying for our service, and they won't receive account notifications because of unverified email addresses. It also opens our service to be abused by spammers and fake registration.

Please note that disposable email addresses are not allowed, and will be blocked by our other service IsTempMail.

Social login supports only one Google account

Currently, you can log in to SetCronJob using multiple Facebook and Google accounts. After April 20, 2022, one user can only log in using a Google account. Facebook login is deprecated and will be removed. 

Gold Team accounts are not available.

If you want to add more team members, please upgrade your account to a Platinum or Diamond plan.

API functions server.* are deprecated

The functions server.time, server.timezones, and server.useragent are deprecated and will be removed after April 20, 2022. Please stop using them. If you need them for your use case, please let me know.

DNS Cache is now enabled globally

Our new PHP version supports IPv6 address caching, so I just enabled DNS cache by default. It removes the DNS lookup time and saves a lot of server resources, which makes the service more stable and reliable. When your domain name records change, please visit DNS Table to flush the cache record.

[ March 26 ] Group sorted alphabetically 

Groups are now sorted alphabetically. This applies to the cronjobs table, the cronjob search form, the cronjob edit form, and the team member form (Allowed groups).


If there's any new change, I'll post it on the SetCronJob blog.

Over the years, there have been many changes made to improve SetCronJob, but I didn't keep the blog updated. From now on, I'll try to make at least a monthly update post to this blog, so stay tuned.