For whatever reason you might want to run multiple Kamailio instances on the same machine.
In my case I was working on an all-in-one IMS box, which needed the P-CSCF, I-CSCF and S-CSCF all in the one box.
As you probably already know, all the startup scripts for each service/daemon live in the /etc/init.d directory.
We’ll start by copying the existing init.d file for kamailio:
cp /etc/init.d/kamailio /etc/init.d/kamailio1
Next up we’ll edit it to reflect the changes we want made.
You only really need to change the DEFAULTS= parameter, but you may also want to update the description, etc.
The CFGFILE parameter we can update later in the defaults file or specify here.
Next up we’ll need to create a defaults file where we specify how our instance will be loaded,
Again, we’ll copy an existing defaults file and then just edit it.
cp /etc/default/kamailio /etc/default/kamailio1
The file we just created from the copy will need to match the filename we specified in the init.d file for DEFAULTS=
In my case the filename is kamailio1
In here I’ll need to at minimum change the CFGFILE= parameter to point to the config file for the Kamailio instance we’re adding.
In this case the file is called kamailio1.cfg in /etc/kamailio/
For some Ubuntu systems you’re expected to reload the daemons:
Starting / Running
Once you’ve done all this you can now try and start your instance using /etc/init.d/kamailio1 start
For my example startup failed as I haven’t created the config file for kamailio1.cfg
So I quickly created a config file and tried to start my service:
And presto, my service is running,
I can verify all is running through ps aux:
ps aux | grep kamailio1
Just keep in mind if you want to run multiple instances of Kamailio, you can’t have them all bound to the same address / port.
This also extends to tools like kamcmd which communicate with Kamailio over a socket, again you’d need to specify unique ports for each instance.