I have the following scenario:
Like all good GSM things there's a specification for that :)
GSM 07.10 is the specification and there are libraries out there for some time that can support you. Some are libraries you can build into your server systems and some are actual daemons.
A quick google for "gsm multiplexing" will get your started that I am sure.
You may write a single service that communicates with the real serial port but offers two virtual serial ports itself like described here Virtual Serial Port for Linux
I had a similar problem managing a serial port between some independent processes. Finally my best solution was to use Redis to listen for calls to the port.
The process that wants to send something, publishes through redis, in the channel 'uart_request' a json with the arguments to make the call to the serial port, and also a hash ('hash_message') made with the timestamp. Just before posting the json, the process subscribes to 'hash_message'.
Finally, a process listens for the posts in 'uart_request'. When a post arrives, take the 'hash_message' from the json, make the call to the serial port, wait for the response and post the response in 'hash_message'.
The point is that there is just one process that control the serial port, so its not necessary to open and close. Works really good.