Our tale began with a seemingly innocuous Jackett.service happily chugging along on a Debian LXC. Then, like a surprise boss fight in an RPG, a stealthy auto-update (v0.23.23 to v0.23.28) swooped in, completely disregarding my carefully set UI flag to “Disable auto update.” The logs, once a serene stream of Info messages, abruptly turned into a battlefield. The old process, still clinging to life during the update, got unceremoniously killed, status=11/SEGV, spewing signal=ABRT like a digital death rattle. systemd, bless its heart, tried its best, rescheduling restarts and counting to five before finally throwing in the towel, declaring jackett.service: Failed with result ‘signal’. It was clear: Jackett decided it knew better than me, and then immediately fell on its face. Classic.
The Exorcism: Wiping the Slate Clean
First things first, a broken installation is worse than no installation. The goal was a clean slate. After some frantic forum searches and Reddit dives (because, let’s be honest, where else do you find real-world Linux wisdom?), the consensus was to use Jackett’s own uninstaller script. Being root, sudo was a quaint notion from a bygone era, so it was a direct pipe to bash.
wget https://raw.githubusercontent.com/Jackett/Jackett/master/uninstall_service_systemd.sh --quiet -O -|bash
The script whirred to life, stopping the errant service, disabling it, removing symlinks, deleting the service file, and finally, declaring Jackett uninstallation finished. A quick systemctl status jackett confirmed Loaded: not-found, proving the service was banished. However, like a lingering ghost, a stray .config folder remained in /home/jackett. Clearly, even uninstallers have their limits. A swift
rm -rf /opt/Jackett
took care of that.
The Rebirth: A Fresh Start with Strict Rules
With the old mess swept away, it was time for a fresh installation. The README suggested /opt for binaries, and who am I to argue with documentation (especially after the last fiasco)?
cd /opt
f=Jackett.Binaries.LinuxAMDx64.tar.gz
wget -Nc https://github.com/Jackett/Jackett/releases/latest/download/"$f"
tar -xzf "$f"
rm -f "$f"
chown -R jackett:jackett /opt/Jackett*
Download, extract, delete the archive, set ownership. Standard stuff. A quick
/opt/Jackett/jackett --version
confirmed Jackett v0.23.38, proving the new binaries were in place and properly owned. Now, for the critical part: preventing future update rebellions. The README’s “Command line switches” section was my bible, revealing the glorious –NoUpdates flag. I crafted a new systemd service file (`/etc/systemd/system/jackett.service`) with this in mind.
[Unit]
Description=Jackett
After=network.target
[Service]
Type=simple
User=jackett
Group=jackett
ExecStart=/opt/Jackett/jackett --NoRestart --NoUpdates -p 9117 --ListenPublic
WorkingDirectory=/opt/Jackett
TimeoutStopSec=20
KillMode=process
Restart=on-failure
[Install]
WantedBy=multi-user.target
Notice –NoRestart and –NoUpdates? That’s the digital equivalent of putting a leash and muzzle on a misbehaving dog. And –ListenPublic for good measure, because this LXC (192.168.1.104) isn’t shy.
The Stubborn Ghost: User Permissions Strike Again
Excitedly, I reloaded systemd and tried to enable –now the service. Instant Active: failed (Result: signal) … code=killed, signal=ABRT. Déjà vu, but worse. It wasn’t an update, it was a fresh install failing. I quickly stopped the service to prevent a restart loop. My next move, as any good Linux detective would do (after a few more forum searches), was to manually run the executable as the service user.
su jackett
and it hung. Just sat there, mocking me. It was like waiting for dial-up, but the connection eventually materialized. I need to research this later…
Trying to run
/opt/Jackett/jackett
from the jackett shell yielded the smoking gun:
System.Exception: Could not create settings directory. Access to the path '/home/jackett' is denied.
The Final Fix: A Simple Permission Change
The error was so simple it was infuriating. The jackett user lacked write access to its own home directory… Clasic!! After exiting the jackett user’s shell and returning to root, issued
chown jackett:jackett /home/jackett
and we were good to go. Restarting the service this time was a success. The logs were clean, and the service was `active (running)`. The journey was over. My machine now has a Jackett instance that is stable, secure, and most importantly, knows its place.
And I know to make sure to check user home directories…