Thanks. I think that's the approach I'll take. I don't think I'll need to 
use monit at all then. I will need to start N Racket processes though. I 
found this article that may work for me:

https://serverfault.com/questions/730239/start-n-processes-with-one-systemd-service-file

I don't think I'll try the SO_REUSEPORT idea at this point, so I'll need 
each of the N Racket servers to listen on a different port and have nginx 
reverse proxy to them.

I think by having systemd manage the N processes separately, I can get 
auto-restart etc. for free w/o having to code up a master Racket process 
supervising N worker processes.

On Thursday, November 29, 2018 at 5:17:38 PM UTC-5, Philip McGrath wrote:
>
> To give you an example, here's a very basic systemd file that I use to run 
> a Racket web server: 
>
> /etc/systemd/system/ricoeur-portal.service
> [Unit]
> Description=Digital Ricoeur portal web server
>
> [Service]
> User=ricoeurd
> Group=ricoeurd
> AmbientCapabilities=CAP_NET_BIND_SERVICE
> WorkingDirectory=/home/ubuntu/ricoeur-portal/
> ExecStart=/usr/local/bin/ricoeur-portal --production
>
> [Install]
> WantedBy=multi-user.target
>
> It's particularly nice from a security perspective that 
> `CAP_NET_BIND_SERVICE` makes it easy to run as a user with minimal 
> privileges and still be able to bind to ports 80 and 443.
>
> -Philip
>
>
> On Thu, Nov 29, 2018 at 5:09 PM Alex Harsanyi <alexha...@gmail.com 
> <javascript:>> wrote:
>
>>
>>
>> On Thursday, November 29, 2018 at 11:17:38 PM UTC+8, Brian Adkins wrote:
>>>
>>> I'm running Ubuntu 18.04 LTS, so I do have systemd. Just to clarify, are 
>>> you stating that systemd will take a program designed to run as a 
>>> foreground process and run it in the background automatically? 
>>>
>>
>> Yes.
>>  
>>
>>> I was planning on using monit to monitor/restart/etc. a set of Racket 
>>> processes, but maybe systemd will do everything I need such as restarting 
>>> one if it crashes.
>>>
>>> On Wednesday, November 28, 2018 at 10:45:59 PM UTC-5, Alex Harsanyi 
>>> wrote:
>>>>
>>>>
>>>> If your Linux installation has systemd, you can create a service file 
>>>> for your application -- this way, systemd will manage the application as a 
>>>> server or daemon.  Systemd will even redirect stderr messages to the 
>>>> system 
>>>> log.
>>>>
>>>> Alex.
>>>>
>>>> On Thursday, November 29, 2018 at 10:56:25 AM UTC+8, Brian Adkins wrote:
>>>>>
>>>>> I briefly looked at the daemonize package on Ubuntu linux, but 
>>>>> couldn't get it to work properly. I found the following Rosetta Code page:
>>>>>
>>>>> https://rosettacode.org/wiki/Run_as_a_daemon_or_service#Racket
>>>>>
>>>>> So, I just tried the code in that example, and it seems to work fine:
>>>>>
>>>>> (module+ main
>>>>>         * ((get-ffi-obj 'daemon #f (_fun _int _int -> _int)) 0 0)*
>>>>>          (serve/servlet
>>>>>           dispatcher
>>>>>           #:log-file "hello.log"
>>>>>           #:stateless? #t
>>>>>           #:port 6995
>>>>>           #:command-line? #t
>>>>>           #:file-not-found-responder not-found
>>>>>           #:launch-browser? #f
>>>>>           #:servlet-regexp #rx""))
>>>>>
>>>>> I'm just wondering if there is a better way to accomplish this since 
>>>>> it feels a bit kludgy to me.
>>>>>
>>>>> Thanks,
>>>>> Brian
>>>>>
>>>>> -- 
>> You received this message because you are subscribed to the Google Groups 
>> "Racket Users" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to racket-users...@googlegroups.com <javascript:>.
>> For more options, visit https://groups.google.com/d/optout.
>>
>

-- 
You received this message because you are subscribed to the Google Groups 
"Racket Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to racket-users+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to