[mythtv-users] no backend loop requires reboot

Leo Butler leo.butler81 at googlemail.com
Thu Jul 8 20:10:17 UTC 2021


Stephen Worthington <stephen_agent at jsw.gen.nz> writes:

> On Mon, 5 Jul 2021 19:27:53 -0600, you wrote:
>
>>If I ever start mythfrontend when I don't have mythbackend running, I am 
>>forced to reboot the machine.  Mythfrontend starts a loop where it will 
>>fail to find the backend, shut down and restart itself and fail to find 
>>the backend again.  The only way I have found to get out of this loop is 
>>to reboot.  Is there a better way?
>>
>>Lloyd
>
> You can just kill mythfrontend.  Is this on Ubuntu?  Ubuntu has a
> script that automatically restarts mythfontend if it dies.  So the
> "mythfrontend" (/usr/bin/mythfrontend) program is actually a script
> file that runs the program "mythfrontend.real"
> (/usr/bin/mythfrontend.real).  There are times when you want to kill
> mythfrontend.real (because it has locked up while playing a bad video
> file, for example).  Then the mythfrontend script will restart
> mythfrontend.real.  At other times, such as your case, you probably
> want to kill the mythfrontend script first, so that mythfrontend.real
> will not be restarted, and then kill mythfrontend.real.
>
> I run MythTV on Xubuntu, and when the Xubuntu desktop (XFCE4) starts,
> I have it set up to automatically open two terminal sessions before it
> starts the mythfrontend script.  That means if I ever need to kill
> mythfrontend or mythfrontend.real, I can just do Alt-Tab to switch to
> one of the terminal sessions and do the necessary commands to kill
> things.  Alternatively, you can start a new terminal session by doing
> Ctrl-Esc to bring up the XFCE4 menu and go to Applications > Terminal
> Emulator.  Or you can start a console session outside X using
> Ctrl-Alt-F1.  Or you can use ssh from another computer to log in to a
> terminal session on the MythTV box.  On recent versions of XFCE4 there
> is a bug - the first time after startup that you do Ctrl-Esc, nothing
> happens, and you have to do it a second time.
>
> If you are using Ubuntu with a Gnome desktop, then you can do
> Ctrl-Alt-T to start a new terminal window.
>
> Once you have a terminal session, you can do this command to find the
> mythfrontend programs:
>
> ps -e | grep mythf
>
> This is what I get:
>
> root at mypvr:/usr/bin# ps -e | grep mythf
>    3673 ?        00:00:00 mythfrontend
>    3703 ?        12:13:00 mythfrontend.re
>
> The "mythfrontend.re" instead of "mythfrontend.real" is because ps has
> default size limits for the columns in its output, and has truncated
> the name.
>
> Then you can use the number in the first column of the ps output (the
> PID = Program ID) to kill it.  First try asking mythfrontend.real to
> stop itself by sending it a normal stop request:
>
> kill <PID>
>
> or
>
> kill -SIGTERM <PID>
>
> or
>
> kill -15 <PID>
>
> All three versions of the command do the same thing - they send a
> SIGTERM request signal to the program.  The program has to handle a
> SIGTERM request and if it does, it will shut itself down in an orderly
> manner.  However, all MythTV programs can suffer from a bug where they
> attempt to shut down after receiving an external request to do so such
> as SIGTERM, but they fail to shut down completely and leave one thread
> still running.  So if that happens, you need to repeat the kill
> command and the program will shut down that final thread.
>
> If mythfrontend is locked up, it will not be able to receive signals
> and will not shut down when requested.  If that happens, you need to
> do:
>
> kill -9 <PID>
>
> or
>
> kill -SIGKILL <PID>
>
> This command, unlike most kill commands, does not send a signal to a
> program.  Instead it sends a request to the operating system to have
> it kill the program.  The system will stop the program instantly - it
> will not have any chance to write anything to disk or shut down in any
> orderly fashion, so it is always best to try an ordinary kill command
> first and only use kill -9 if the program fails to shut down.
>
> Since mythfrontend and mythfrontend.real are normally run from the
> same user as you log in as and is used to run the desktop, there is
> normally no need to use sudo in front of any of those kill commands.
> But if they fail, you can try again using sudo.
>
> If you do not want the mythfrontend script to automatically restart
> mythfrontend.real when it stops, you need to kill the script first,
> using its PID, before killing mythfrontend.real.
>
> Having had to do all this many, many times, I got fed up and decided
> to write a script to automate the process, which I call "killm".  If I
> run "killm" it will kill mythfrontend.real using two "kill -15"
> commands, and automatically do a "kill -9" if that does not work.  If
> I do "killm x" (any text in place of x works), it will kill the
> mythfrontend script first.  If you want to install killm from my web
> server, run these commands:
>
> sudo su
> cd /usr/local/bin
> wget http://www.jsw.gen.nz/mythtv/killm
> chown root:root killm
> chmod u=rwx,og=rx killm
> exit

I would just edit the relevant script and remove the offending code,
like so:

diff /usr/share/mythtv/mythfrontend.sh /usr/share/mythtv/mythfrontend0.sh
36,41c36
<             until $environ /usr/bin/mythfrontend.real --syslog local7 ${MYTHFRONTEND_OPTS}
<                   RET=$?
<                   [ "$RET" = "0" -o "$RET" = "1" -o "$RET" = "254" ]
<             do
<                   notify-send -i info 'Restarting Frontend' "The front-end crashed unexpectedly (exit code $RET) and is restarting. Please wait..."
<             done
---
>             $environ /usr/bin/mythfrontend.real --syslog local7 ${MYTHFRONTEND_OPTS}

You can then symlink /usr/bin/mythfrontend to
/usr/share/mythtv/mythfrontend0.sh, and you'll be fine til the next
package update, when you will need to update the symlink. But that's no
biggy, right, because we all keep notes...or write a script to do it for
us...

Leo


More information about the mythtv-users mailing list