Python脚本作为系统服务运行时调用configparser读取配置文件失败(status=1/FAILURE)求助
Hey there, let's break down why your script works perfectly in the command line but crashes when running as a system service—this almost always boils down to environment differences between your CLI session and the system service context. Here are the most common fixes to check:
1. Fix the Configuration File Path (Most Likely Culprit)
When you run the script in your terminal, it uses your current working directory to resolve relative paths. System services, though, typically run from a default directory like / or /root, so if configfile is a relative path (like config.ini), the service can't locate it.
Instead, use an absolute path for your config file. To make it dynamic (so you don't have to hardcode a path that might change), use Python's os module to get your script's directory and build the full path:
import os import configparser # Get the directory where your script is stored script_directory = os.path.dirname(os.path.abspath(__file__)) # Build the full path to your config file configfile = os.path.join(script_directory, "your_config_filename.ini") config = configparser.ConfigParser() config.read(configfile) csvfile = config.get('Oled-config', 'csvpath2')
2. Check File Permissions
System services often run under a dedicated user (like root or a restricted user you set in your service file). If that user doesn't have read permissions for your config file, the script will fail to load it.
- First, confirm which user your service runs as. For systemd services, look for the
User=line in your.servicefile. - Then, check the config file's permissions with:
ls -l /full/path/to/your/config.ini - Fix permissions by either:
- Changing the file's owner to the service user:
sudo chown service-user:service-group /full/path/to/config.ini - Adding read permissions for all users (only safe if the config has no sensitive data):
sudo chmod o+r /full/path/to/config.ini
- Changing the file's owner to the service user:
3. Verify Configuration File Format & Content
Double-check that your config file exactly matches what your script expects:
- Ensure the section name
Oled-configis spelled correctly (configparser is case-sensitive by default). - Confirm the key
csvpath2exists in that section with no typos. - If your config uses non-ASCII characters, make sure it's saved with UTF-8 encoding (this is less likely to cause a CLI vs service discrepancy, but worth checking).
4. Get Detailed Error Logs
The code=exited, status=1/FAILURE message is generic—you need the actual Python error to pinpoint the issue. For systemd services, run this command to view the full service logs:
journalctl -u your-service-name.service -xe
Look for lines with ERROR or Python tracebacks—this will tell you exactly if it's a FileNotFoundError, PermissionError, or NoSectionError, which will guide your fix.
内容的提问来源于stack exchange,提问作者Bob Morton

