Hi Dan, thanks for your comments. The problem I run into when tried to create the /run/myapp or /var/run/myapp directory manually or by a separate mechanism is that depending on the host system it will be deleted during a reboot. For instance in RHEL 7.x /var/run (or /run, it is a symlink to it actually) by design will delete all subdirectories during reboot.
BR, Daniel El viernes, 24 de noviembre de 2017, 1:14:19 (UTC-3), Dan Book escribió: > > The best practice IMO in regards to permissions for the run and log > directories is to make subdirectories of /var/run and /var/log owned by the > user that will be running hypnotoad, and put the pidfile/logfiles in there. > > The other issue though is if you are running hypnotoad to listen on a > privileged port like 80 or 443, then it needs to start as root or under a > user with the appropriate capabilities assigned (I'm not sure on the > details for this option). You can use > https://metacpan.org/pod/Mojolicious::Plugin::SetUserGroup to drop > permissions after starting as root. > > -Dan > > On Thu, Nov 23, 2017 at 7:45 PM, Daniel Mantovani <dma...@gmail.com > <javascript:>> wrote: > >> Hi, >> >> Type=forking should work just fine, I am not sure that with Type=simple >> you will have all the functionallity you can get from systemd. >> >> A couple of advices though: >> >> 1) to get more confortable with systemd, you probably want to replicate >> as much as possible the example in Mojolicious::Guides::Cookbook. It just >> works very well ( >> https://metacpan.org/pod/distribution/Mojolicious/lib/Mojolicious/Guides/Cookbook.pod#Hypnotoad >> ) >> >> 2) But if you need to have pidfile and log files outside your working >> directory (like in /run/your_app/hypnotoad.pid and >> /var/log/your_app/production.log etc...), this simple approach will not >> work, because you probably don't want to run your application with >> permissions so high it will be able to write in /run or /var/log >> directories. Instead you normally use a user with minimal permissions. >> Besides as far as I know hypnotoad requires to have permission rights in >> an already created directory for the pid file and also for the log file. >> >> If that is the case, what you can do is modify your original service file >> as follows: >> >> (I am supossing here that "/home/mojo_test.pl" is a typo, I guess if >> your user is "mojo_user" for instance, the path to the app will be >> something like "/home/mojo_user/mojo_test.pl") >> >> mojo_test.service >> [Unit] >> Description=My Mojolicious application >> Requires=network.target >> After=network.target >> >> [Service] >> Type=forking >> PIDFile=/run/mojo_test/hypnotoad.pid >> User=mojo_user >> Group=mojo_user >> PermissionsStartOnly=True >> ExecStartPre=/usr/bin/install -o mojo_user -g mojo_user -d /run/mojo_test >> ExecStartPre=/usr/bin/install -o mojo_user -g mojo_user -d >> /var/log/mojo_test >> ExecStart=/usr/local/bin/hypnotoad /home/mojo_user/mojo_test.pl >> ExecReload=/usr/local/bin/hypnotoad /home/mojo_user/mojo_test.pl >> KillMode=process >> >> [Install] >> WantedBy=multi-user.target >> >> Please check that in your configuration file you have the pid set as >> /run/mojo_test/hypnotoad.pid, and that when >> you define the path for the log file it goes inside /var/log/mojo_test >> directory, something like >> >> sub startup { >> ... >> $self->app->log->path('/var/log/mojo_test/production.log'); >> ... >> >> } >> >> About the zero downtime hypnotoad feature, with reload it should work >> without any problems (you can check that in the log file). If you restart >> instead of course it will kill the process and then start again, and you >> can check that also in the log file. >> >> One last thing, if you happen to have a recent version of systemd or you >> are allowed to install that (not my case unfortunatelly), you should check >> RuntimeDirectory= and LogsDirectory= directives. You can check if those are >> supported in your system with >> >> $ man systemd.directives >> >> If you have those, you will probably not need the ExecStartPre directives >> above, because the only thing these do is to create those directories. >> >> Hope it helps. >> BR, >> Daniel >> >> El jueves, 23 de noviembre de 2017, 13:36:10 (UTC-3), Boyd Duffee >> escribió: >>> >>> On 23/11/17 16:14, Dan Book wrote: >>> > I would not recommend running hypnotoad as a Type=simple service with >>> -f. >>> > This will not allow you to use hot-restarts via systemctl reload. >>> >>> Naively, I _can_ hot-restart with systemctl reload servicename, but now >>> you've got me worried. >>> Any idea why it's not advisable and is Type=forking the proper solution? >>> >>> -- >>> Boyd Duffee Keele University (01782) 734225 >>> DevOps - Student Facing Systems >>> >>> Some people are born on third base and go through life >>> thinking they hit a triple - Barry Switzer >>> >> -- >> You received this message because you are subscribed to the Google Groups >> "Mojolicious" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to mojolicious...@googlegroups.com <javascript:>. >> To post to this group, send email to mojol...@googlegroups.com >> <javascript:>. >> Visit this group at https://groups.google.com/group/mojolicious. >> For more options, visit https://groups.google.com/d/optout. >> > > -- You received this message because you are subscribed to the Google Groups "Mojolicious" group. To unsubscribe from this group and stop receiving emails from it, send an email to mojolicious+unsubscr...@googlegroups.com. To post to this group, send email to mojolicious@googlegroups.com. Visit this group at https://groups.google.com/group/mojolicious. For more options, visit https://groups.google.com/d/optout.