Hi Daniel, Thank you deltail adivces. I test follow your guide, but it's error same as I report before, it's in Mojolicious 7.57. I once change Mojolicious to 6.58 to test, it's still error, error output:
[root@localhost ~]# systemctl status mojo_test.service ● mojo_test.service - My Mojolicious application Loaded: loaded (/usr/lib/systemd/system/mojo_test.service; enabled; vendor preset: disabled) Active: failed (Result: exit-code) since Fri 2017-11-24 18:23:20 CST; 6s ago Process: 2822 ExecStart=/root/perl5/bin/hypnotoad /home/mojo_user/mojo_test.pl (code=exited, status=2) Process: 2820 ExecStartPre=/usr/bin/install -o mojo_user -g mojo_user -d /var/log/mojo_test (code=exited, status=0/SUCCESS) Process: 2819 ExecStartPre=/usr/bin/install -o mojo_user -g mojo_user -d /run/mojo_test (code=exited, status=0/SUCCESS) Nov 24 18:23:20 localhost.localdomain hypnotoad[2822]: BEGIN failed--compilation aborted at /usr/local/share/perl5/Mojo/Server/Daemon.pm line 2. Nov 24 18:23:20 localhost.localdomain hypnotoad[2822]: Compilation failed in require at /usr/local/share/perl5/Mojo/Base.pm line 77. Nov 24 18:23:20 localhost.localdomain hypnotoad[2822]: BEGIN failed--compilation aborted at /usr/local/share/perl5/Mojo/Server/Prefork.pm line 2. Nov 24 18:23:20 localhost.localdomain hypnotoad[2822]: Compilation failed in require at /usr/local/share/perl5/Mojo/Server/Hypnotoad.pm line 9. Nov 24 18:23:20 localhost.localdomain hypnotoad[2822]: BEGIN failed--compilation aborted at /usr/local/share/perl5/Mojo/Server/Hypnotoad.pm line 9. Nov 24 18:23:20 localhost.localdomain hypnotoad[2822]: Compilation failed in require at /root/perl5/bin/hypnotoad line 20. Nov 24 18:23:20 localhost.localdomain systemd[1]: mojo_test.service: control process exited, code=exited status=2 Nov 24 18:23:20 localhost.localdomain systemd[1]: Failed to start My Mojolicious application. Nov 24 18:23:20 localhost.localdomain systemd[1]: Unit mojo_test.service entered failed state. Nov 24 18:23:20 localhost.localdomain systemd[1]: mojo_test.service failed. David 在 2017年11月24日星期五 UTC+8上午8:45:57,Daniel Mantovani写道: > > 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 [email protected]. To post to this group, send email to [email protected]. Visit this group at https://groups.google.com/group/mojolicious. For more options, visit https://groups.google.com/d/optout.
