Linux journalctl 未與 systemctl 狀態同步 / Journalctl 未更新
我正在執行我的自定義服務,我們稱之為“foo.service”。這是一個記錄一些事情的 gunicorn python 程序。
我曾經能夠使用實時日誌概覽,
journalctl -u <service> -f
但現在日誌似乎卡在了一些過去的日誌中。當我使用systemctl status <service>
它時,它確實顯示了最新的日誌。所以我的日誌記錄確實有效,但 journalctl 似乎卡住了,沒有顯示任何更新。例子:
journalctl -u foo.service -f
Nov 25 16:19:09 <name> systemd[1]: Started Instance to load up the program and its endpoints. Nov 25 16:19:09 <name> gunicorn[28267]: 2019-11-25 16:19:09,844 [INFO]: Connecting to localhost:9773 Nov 25 16:19:09 <name> gunicorn[28267]: 2019-11-25 16:19:09,845 [INFO]: Connecting to localhost:9771 Nov 25 16:19:09 <name> gunicorn[28267]: 2019-11-25 16:19:09,846 [INFO]: Connected Nov 25 16:19:09 <name> gunicorn[28267]: 2019-11-25 16:19:09,846 [INFO]: Connected
systemctl status foo.service
Nov 26 11:39:53 <name> systemd[1]: Started Instance to load up the program and its endpoints. Nov 26 11:39:53 <name> gunicorn[29117]: 2019-11-26 11:39:53,458 [INFO]: Connecting to localhost:9773 Nov 26 11:39:53 <name> gunicorn[29117]: 2019-11-26 11:39:53,459 [INFO]: Connecting to localhost:9771 Nov 26 11:39:53 <name> gunicorn[29117]: 2019-11-26 11:39:53,460 [INFO]: Connected Nov 26 11:39:53 <name> gunicorn[29117]: 2019-11-26 11:39:53,460 [INFO]: Connected
後者是剛剛創建的日誌記錄,所以它就像一個魅力,但據我了解,journalctl 似乎也被更新了。這在過去確實有效,我從前天開始就遇到了這些問題。
我嘗試重新啟動 journalctl 但這似乎不起作用。
提前致謝。
編輯: 當我重新啟動服務時,我注意到 gunicorn 在查看 systemctl 服務的狀態時拋出異常,我無法向上滾動,所以我不知道錯誤的原因是什麼(systemctl 狀態):
Nov 26 15:08:27 <name> gunicorn[29390]: self.log.info("Shutting down: %s", self.master_name) Nov 26 15:08:27 <name> gunicorn[29390]: File "/opt/my-program/venv/lib/python3.5/site-packages/gunicorn/glogging.py", line 271, in info Nov 26 15:08:27 <name> gunicorn[29390]: self.error_log.info(msg, *args, **kwargs) Nov 26 15:08:27 <name> gunicorn[29390]: Message: 'Shutting down: %s' Nov 26 15:08:27 <name> gunicorn[29390]: Arguments: ('Master',) Nov 26 15:08:27 <name> systemd[1]: Started Instance to load up the program and its endpoints.
我的 foo.service 配置文件:
[Unit] Description=Instance to load up the program and its endpoints After=network.target [Service] User=root Group=www-data WorkingDirectory=/opt/my-program/my-program-thing Environment="PATH=/opt/my-program/venv/bin" ExecStart=/opt/my-program/venv/bin/gunicorn --workers 1 --threads 12 --bind unix:foo.sock -m 007 app:app --bind 0.0.0.0:8085 --access-logfile '/var/log/foo.info.log' --error-logfile '/var/log/foo.err.log' StandardOutput=journal StandardError=journal [Install] WantedBy=multi-user.target
嘗試將這些行添加到您的服務文件中
$$ Service $$標籤
StandardOutput=journal StandardError=journal
然後執行 systemctl daemon-reload,然後執行 systemctl restart your_service.service
我編輯答案供其他人輕鬆查看。問題是 /var 文件系統空間不足,因此 journalctl 無法將日誌保存到磁碟並隨後讀取,這就是 systemctl status 和 journalctl -fu 之間存在差異的原因。