I’m currently trying to set up a self-hosted SearX search engine on Ubuntu 22.04. In order for the search engine to work, I have to manually run the following commands on startup:

#! /usr/bin/bash

sudo -H -u searx -i

cd /usr/local/searx/searx-src

export SEARX_SETTINGS_PATH="/etc/searx/settings.yml"

python searx/webapp.py

This is kind of annoying to have to do, so I put the script into /etc/rc.local and went through all the steps to enable all that. Now my rc.local file looks like:

#!/bin/sh -e

#! /usr/bin/bash

sudo -H -u searx -i

cd /usr/local/searx/searx-src

export SEARX_SETTINGS_PATH="/etc/searx/settings.yml"

python searx/webapp.py

exit 0

However, the code fails, and upon checking “sudo systemctl status rc-local.service” I get the following (abbreviated) error message:

 Loaded: loaded (/etc/systemd/system/rc-local.service; enabled; vendor preset: enabled)
Drop-In: /usr/lib/systemd/system/rc-local.service.d
         └─debian.conf
 Active: failed (Result: exit-code) since Thu 2023-10-05; 55s ago
Process: 8468 ExecStart=/etc/rc.local start (code=exited, status=127)
    CPU: 12ms

systemd[1]: Starting /etc/rc.local Compatibility… sudo[8469]: root : PWD=/usr/local/searx ; USER=searx ; COMMAND=/bin/bash sudo[8469]: pam_unix(sudo-i:session): session opened for user searx(uid=999) by (uid=0) sudo[8469]: pam_unix(sudo-i:session): session closed for user searx rc.local[8468]: /etc/rc.local: 6: python: not found systemd[1]: rc-local.service: Control process exited, code=exited, status=127/n/a systemd[1]: rc-local.service: Failed with result ‘exit-code’. systemd[1]: Failed to start /etc/rc.local Compatibility.

I understand that an Exit Code 127 means that the code is failing because it can’t access the following directory:

cd /usr/local/searx/searx-src

But I honestly have no idea how to fix my code to make this possible. Please lmk if you have any suggestions

  • @EddyBot@feddit.de
    link
    fedilink
    2
    edit-2
    1 year ago

    why not create a systemd service directly for this instead of going through ancient rc.local way? you can specify with which user to run it (without sudo or su schenanigans) and in which directory to start with
    environmental variables are also possible

    something like (didn’t tested it)

    [Unit]
    Description=SearX
    After=network.target
    
    [Service]
    Type=simple
    WorkingDirectory=/usr/local/searx/searx-src
    User=searx
    Group=searx
    Environment="SEARX_SETTINGS_PATH=/etc/searx/settings.yml"
    ExecStart=/usr/bin/python /usr/local/searx/searx-src/searx/webapp.py 
    Restart=on-failure
    RestartSec=30
    
    [Install]
    WantedBy=multi-user.target 
    

    keep in mind though that SearX is unmaintained since last month, you might consider SearXNG