查看systemd服务的stdout / stderr
我为自定义应用程序创建了一个简单的systemd服务文件。当我手动运行该应用程序时,它运行良好,但是当我使用systemd运行该应用程序时,我的CPU耗尽了。 我正在尝试找出问题所在,但不知道在哪里找到输出(或如何配置systemd将输出放置在某处)。 这是我的服务文件: [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 在整个应用程序中,我输出到stdout和stderr。 如何读取守护程序的输出? 编辑: 我发现了man systemd.exec,其中提到了该StandardOutput=选项,但是我不确定如何使用它。从手册页: StandardOutput= 控制已执行进程的文件描述符1(STDOUT)连接到的位置。采取以下之一:继承,null,tty,syslog,kmsg,kmsg + console,syslog + console或socket。 如果设置为继承,则将标准输入的文件描述符复制为标准输出。如果设置为null,则标准输出将连接到/dev/null,即写入其中的所有内容都将丢失。如果设置为tty,则标准输出将连接到tty(通过进行配置TTYPath=,请参见下文)。如果使用TTY输出,则仅执行的过程将不会成为终端的控制过程,也不会失败或等待其他过程释放终端。 syslog将标准输出连接到syslog(3)系统记录器。 kmsg将其与内核日志缓冲区连接,该缓冲区可通过dmesg(1)访问。 syslog +控制台和kmsg +控制台工作类似,但也将输出复制到系统控制台。 socket通过套接字激活将标准输出连接到套接字,其语义类似于的相应选项StandardInput=。此设置默认为继承。 这是否意味着这些是我唯一的选择?例如,我想输入输出内容/dev/shm。我想我可以使用Unix域套接字并编写一个简单的侦听器,但这似乎有点不必要。 我只需要使用它进行调试,最终可能会删除大多数日志并将输出更改为syslog。