[原service配置]:
StandardOutput=append:/some_path/log/access.log
StandardError=append:/some_path/log/err.log
已确认了目录权限没有问题。
[查看 systemd 错误日志]:
journalctl -u some_service -b
大量的错误信息:
Failed to parse output specifier, ignoring: /some_path/access.log
[真正的原因 systemd 版本问题]:
参考: https://unix.stackexchange.com/questions/321709/redirect-systemd-service-logs-to-file
说明:
systemd v236 之后版本支持 file。 (自动创建文件)
systemd v240 之后版本支持 append。(即每次重启后不会覆盖原文件)
[验证]:
$ sudo systemctl --version
systemd 237
所以不支持 append。
[解决]:
[start_django.sh]:
#!/bin/bash
/usr/bin/python3 /opt/django/manage.py runserver 0.0.0.0:6969 >> /opt/django/log.txt 2>&1
[/etc/systemd/system/django.service]:
[Unit]
Description=Django_Service
After=network.target
[Service]
User=root
Group=root
WorkingDirectory=/opt/djangoProject111
ExecStart=/bin/bash /opt/djangoProject111/start_django.sh
Restart=always
[Install]
WantedBy=multi-user.target
========================================
【为何 systemctl stop 有效?】
进程管理
systemd 监控 ExecStart 命令启动的主进程,并确保其在服务运行期间存活。
日志记录
journalctl 中会记录启动和停止服务的行为。
Restart=always
虽然设置了 Restart=always,但手动停止服务时不会自动重启,这是 systemd 的设计行为,避免冲突。