Tôi đã tạo một tệp dịch vụ systemd đơn giản cho một ứng dụng tùy chỉnh. Ứng dụng hoạt động tốt khi tôi chạy thủ công, nhưng CPU của tôi được tối đa hóa khi tôi chạy nó với systemd.
Tôi đang cố gắng theo dõi vấn đề của mình ở đâu, nhưng tôi không biết tìm đầu ra ở đâu (hoặc cách định cấu hình systemd để đặt đầu ra ở đâu đó).
Đây là tập tin dịch vụ của tôi:
[Unit]
Description=Syncs files with a server when they change
Wants=network.target
After=network.target
[Service]
ExecStart=/usr/local/bin/filesync-client --port 2500
WorkingDirectory=/usr/local/lib/node_modules/filesync-client
Restart=always
[Install]
WantedBy=multi-user.target
Trong suốt ứng dụng, tôi xuất ra stdout và stderr.
Làm thế nào tôi có thể đọc đầu ra của daemon của tôi?
Biên tập:
Tôi tìm thấy man systemd.exec
, trong đó đề cập đến StandardOutput=
tùy chọn, nhưng tôi không chắc làm thế nào để sử dụng nó. Từ trang người đàn ông :
StandardOutput=
Kiểm soát nơi mô tả tệp 1 (STDOUT) của các quy trình được thực hiện được kết nối với. Có một trong những kế thừa , null , tty , syslog , kmsg , kmsg + console , syslog + console hoặc socket .
Nếu được đặt để kế thừa bộ mô tả tệp của đầu vào tiêu chuẩn được nhân đôi cho đầu ra tiêu chuẩn. Nếu được đặt thành đầu ra tiêu chuẩn null sẽ được kết nối với
/dev/null
, tức là mọi thứ được ghi vào nó sẽ bị mất. Nếu được đặt thành đầu ra tiêu chuẩn tty sẽ được kết nối với một tty (như được định cấu hình quaTTYPath=
, xem bên dưới). Nếu TTY chỉ được sử dụng cho đầu ra, quy trình được thực hiện sẽ không trở thành quy trình kiểm soát của thiết bị đầu cuối và sẽ không thất bại hoặc chờ các quy trình khác giải phóng thiết bị đầu cuối. syslog kết nối đầu ra tiêu chuẩn với bộ ghi hệ thống syslog (3). kmsg kết nối nó với bộ đệm nhật ký kernel có thể truy cập thông qua dmesg (1). syslog + console và kmsg + consolehoạt động tương tự nhưng cũng sao chép đầu ra vào bảng điều khiển hệ thống. ổ cắm kết nối đầu ra tiêu chuẩn với một ổ cắm từ kích hoạt ổ cắm, ngữ nghĩa tương tự như tùy chọn tương ứng củaStandardInput=
. Cài đặt này mặc định để kế thừa.
Điều này có nghĩa rằng đây là những lựa chọn duy nhất của tôi? Tôi muốn, ví dụ, để đưa đầu ra vào /dev/shm
hoặc một cái gì đó. Tôi cho rằng tôi có thể sử dụng một ổ cắm tên miền Unix và viết một trình nghe đơn giản, nhưng điều này có vẻ hơi không cần thiết.
Tôi chỉ cần cái này để gỡ lỗi, và có lẽ cuối cùng tôi sẽ xóa hầu hết các bản ghi và thay đổi đầu ra thành syslog.
/var/log/syslog
, nhưng /var/log/messages
thực hiện mánh khóe. Vấn đề là, theo nhật ký, trình nền của tôi gặp sự cố khi bắt đầu, nhưng tôi có thể nói rằng nó vẫn đang chạy vì nó có máy chủ HTTP và tôi có thể truy vấn nó. Có vẻ như phần còn lại của các bản ghi đang bị mất ...
StandardOutput=tty
để bạn có thể thấy những gì đang xảy ra khi bạn khởi chạy trình nền của mình. Nó sẽ xuất thiết bị đầu cuối (bạn có thể phải sử dụng ttyS0
hoặc tương tự để có được đầu ra trên màn hình của bạn).
ExecStart=/usr/local/bin/filesync-client --port 2500 2>/tmp/filesync.log
/var/log/syslog
đầu ra chưa? Hầu hết các hệ thống sẽ đăng nhập vào/var/log/
để tôi bắt đầu bằng cách kiểm tra ở đó. Bạn có thể sử dụnggrep
để tìm kiếm văn bản nếu bạn biết đầu ra:grep "my output" /var/log
nên thực hiện thủ thuật.