我试图在 Ubuntu 16.04 上运行水槽作为 systemd 服务并在 /etc/systemd/system/flume-ng.service
[Unit]
Description=Apache Flume
[Service]
ExecStart=/usr/bin/nohup /opt/flume/current/bin/flume-ng agent -c /etc/flume-ng/conf -f /etc/flume-ng/conf/flume.conf --name a1 &
ExecStop=/opt/flume/current/bin/flume-ng agent stop
[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)
我尝试添加以下几行
StandardOutput=/var/log/flume-ng/log1.log
StandardError=/var/log/flume-ng/log2.log
Run Code Online (Sandbox Code Playgroud)
这对我不起作用。我没有跑systemctl daemon-reload
和systemctl restart flume-ng
有谁知道这是如何工作的?
Pio*_*icz 41
以下仅适用于 systemd v236 及更新版本:
StandardOutput=file:/var/log/flume-ng/log1.log
StandardError=file:/var/log/flume-ng/log2.log
Run Code Online (Sandbox Code Playgroud)
如此处所述。
如果 systemd 早于 v236,您可以使用:
ExecStart=/bin/sh -c 'exec /usr/bin/my_binary [arguments] >/var/log/flume-ng/log1.log 2>/var/log/flume-ng/log2.log'
Run Code Online (Sandbox Code Playgroud)
请注意,这样每次服务重新启动时,整个日志文件内容都将被覆盖。
如果您想在服务重新启动之间维护文件日志,并且只需将新记录的行附加到其中:
# Works only in systemd v240 and newer!
StandardOutput=append:/var/log/flume-ng/log1.log
StandardError=append:/var/log/flume-ng/log2.log
Run Code Online (Sandbox Code Playgroud)
如果 systemd 早于 v240,您可以使用:
ExecStart=/bin/sh -c 'exec /usr/bin/my_binary [arguments] >>/var/log/flume-ng/log1.log 2>>/var/log/flume-ng/log2.log'
Run Code Online (Sandbox Code Playgroud)
exec
表示my_binary
在不分叉的情况下设置重定向后,shell 程序将被程序替换。所以和my_binary
直接在ExecStart=
.
Jde*_*eBP 27
ExecStart=/usr/bin/nohup …
这是错误的。去掉它。此服务未在交互式登录会话中运行。首先没有控制终端或会话领导者向它发送挂断信号。
ExecStart=… &
这是错误的。去掉它。这不是 shell 脚本。 &
没有类似 shell 的特殊含义,无论如何都是启动服务的错误方式。
StandardOutput=/var/log/flume-ng/log1.log StandardError=/var/log/flume-ng/log2.log
这些都是错误的。不要使用这些。systemd已经将服务进程的标准输出和错误发送到其日志,服务单元中没有任何此类设置。你可以查看它
journalctl -e -u flume-ng.service
小智 13
要在不覆盖的情况下记录到文件(需要 system.d 版本 240+):
StandardOutput=append:/var/log/flume-ng/log1.log
StandardError=append:/var/log/flume-ng/log2.log
Run Code Online (Sandbox Code Playgroud)
或者
StandardOutput=append:/var/log/flume-ng/log.log
StandardError=inherit
Run Code Online (Sandbox Code Playgroud)
我希望这可以帮助别人。对于乌南图
[Unit]
Description=name-service
After=syslog.target
After=mysql.service
Requires=mysql.service
[Service]
Type=idle
PIDFile=/path_to_PID/****.pid
WorkingDirectory=/path_to_directory
User=root
Group=root
ExecStart=****.py
Restart=always
TimeoutStartSec=1min
RestartSec=1min
KillMode=process
StandardOutput=append:/path_to_log/service.log
StandardError=append:/path_to_log/service_error.log
[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)
对于 CENTOS
[Unit]
Description=name-service
After=syslog.target
After=mysql.service
Requires=mysql.service
[Service]
Type=idle
PIDFile=/path_to_PID/****.pid
WorkingDirectory=/path_to_directory
User=root
Group=root
ExecStart=****.py >>/path_to_log/log.log
Restart=always
TimeoutStartSec=1min
RestartSec=1min
KillMode=process
[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)
“之后”和“需要”是必要的。注意“用户”和“组”
另一种选择:在执行的脚本中添加日志记录。