我会知道是否可以使用以不同输入参数开头的相同脚本创建服务.如:
[Unit]
Description=script description
[Service]
Type=simple
ExecStart=/script.py parameters1
ExecStart=/script.py parameters2
Restart=on-failure
[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)
可能吗?然后它会启动到串行模式?还是分成两个不同的过程?最好的祝福
在将程序作为systemd服务运行时,我无法将STDOUT和STDERR传送到文件.我已经尝试将以下内容添加到.service文件中:
ExecStart=/apppath/appname > /filepath/filename 2>&1
Run Code Online (Sandbox Code Playgroud)
但这不起作用.输出结果在/ var/log/messages中,可以使用journalctl查看,但我想要一个单独的文件.
我也试过设置,StdOutput=tty但找不到将其重定向到文件的方法.
任何帮助,将不胜感激.
随着journalctl,就可以删除旧的日志,通过指定的最大磁盘空间,他们可以使用,也可以有最大年龄,或(使用选件单独的日志文件的最大数量--vacuum-size,--vacuum-time或--vacuum-files).
有没有办法将此删除限制在特定的系统单元?
journalctl -u <unit> --vacuum-time=2d似乎没有按预期工作:根据文档,-u只有在显示日志时才有效.
我有一个python项目,我希望能够使用类似的安装它,python setup.py install以便安装自动创建systemd服务.
我遇到了一些麻烦,很可能是正确设置路径或导入.
我的环境:
- Ubuntu 15.04
- Python 2.7(虽然它也很适合在py3中工作).
项目结构:
+ top-folder
+ super_project
+ folder1
__init__.py
file1.py
+ folder2
__init__.py
file2.py
__init__.py
main.py
setup.py
setup.cfg
Run Code Online (Sandbox Code Playgroud)
setup.py:
from setuptools.command.install import install
from setuptools import setup, find_packages
import subprocess
import os
class CustomInstallCommand(install):
def run(self):
install.run(self)
current_dir_path = os.path.dirname(os.path.realpath(__file__))
create_service_script_path = os.path.join(current_dir_path, 'super_project', 'install_scripts', 'create_service.sh')
subprocess.check_output([create_service_script_path])
setup(
name='super-project',
author='Myself',
version='0.0.1',
description='My Description',
packages=find_packages(exclude=['contrib', 'docs']),
# this will create the /usr/local/bin/super-project entrypoint script
entry_points={
'console_scripts': [
'super-project = super_project.main:main'
] …Run Code Online (Sandbox Code Playgroud) 我有一个针对ElasticSearch的systemd配置的问题.
[Unit]
Description=platform-elasticsearch
After=syslog.target network.target remote-fs.target nss-lookup.target
[Service]
User={{ app_user }}
Group={{ app_group }}
Environment=ES_PATH_CONF=/platform/opt/elasticsearch-{{ elasticsearch.version }}/config
Environment=JAVA_HOME=/platform/opt/jdk{{ jdk.major_version }}_{{ jdk.minor_version }}
LimitAS=infinity
LimitRSS=infinity
LimitCORE=infinity
LimitNOFILE=100000
LimitMEMLOCK=100000
StandardOutput=syslog
StandardError=syslog
WorkingDirectory=/platform/var/app/elasticsearch
ExecStart=/platform/opt/elasticsearch-{{ elasticsearch.version }}/bin/elasticsearch
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s -TERM $MAINPID
TimeoutStopSec=60
# When a JVM receives a SIGTERM signal it exits with code 143
SuccessExitStatus=143 0
Type=simple
Restart=on-failure
RestartSec=10
PIDFile=/platform/var/run/elasticsearch.pid
[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)
这似乎不允许我配置vm.max_map_count设置.
Jul 20 14:53:46 scratchpad elasticsearch: [2018-07-20T14:53:46,359][INFO ][o.e.b.BootstrapChecks ] [1oQJNUK] bound or publishing to a non-loopback address, …Run Code Online (Sandbox Code Playgroud) 我在 WSL2 上使用 Ubuntu(不是在 Docker 桌面上)。
\n根据如何修复 docker \xe2\x80\x98Cannot connect to the Docker daemon at unix:///var/run/docker.sock。Ubuntu 上的 docker 守护进程是否正在运行?\xe2\x80\x99,我可以在启动时自动启动 docker 守护进程
\nsudo systemctl enable docker\nRun Code Online (Sandbox Code Playgroud)\n而不是在每次启动时重新启动它
\nsudo systemctl start docker\nRun Code Online (Sandbox Code Playgroud)\n这两个命令都避免了“无法连接到位于 unix:///var/run/docker.sock 的 Docker 守护进程。docker 守护进程正在运行吗?”。
\n当使用两者中的任何一个时,我得到
\n\n\n使用 \n/lib/systemd/systemd-sysv-install 将 docker.service 的状态与 SysV 服务脚本同步。执行:\n/lib/systemd/systemd-sysv-install 启用 docker
\n
测试运行显示,docker 尚未运行:
\n\n\nRun Code Online (Sandbox Code Playgroud)\ndocker run hello-world \ndocker:无法连接到 \nunix:///var/run/docker.sock 处的 Docker 守护程序。docker 守护进程是否正在运行?请参阅\n\'docker run --help\'。
\n
之前的一些步骤,此时我也收到了不同的消息:
\n\n …
Tomcat文档描述了编译和安装JSVC的过程,该过程可用于将Tomcat作为守护进程运行.据我了解,JSVC有两个好处:
我一直在学习systemd,包括服务单元配置.根据我的有限理解,如果我设置User=tomcat(使用所需的用户名)并Restart=on-failure在我的tomcat.service配置文件中,systemd能够执行与JSVC相同的任务.
使用JSVC,我希望tomcat.service看起来像这样:
[Unit]
Description=Apache Tomcat
After=network.target
[Service]
Environment=CATALINA_PID=/var/run/tomcat.pid
Environment=JAVA_HOME=/path/to/java
Environment=CATALINA_HOME=/opt/tomcat
...
ExecStart=/opt/tomcat/bin/jsvc \
-Dcatalina.home=${CATALINA_HOME} \
-user tomcat \
-java-home ${JAVA_HOME} \
-pidfile ${CATALINA_PID} \
...
org.apache.catalina.startup.Bootstrap
ExecStop=/opt/tomcat/bin/jsvc \
-pidfile ${CATALINA_PID} \
...
-stop \
org.apache.catalina.startup.Bootstrap
[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)
使用systemd,我希望tomcat.service看起来像这样:
[Unit]
Description=Apache Tomcat
After=network.target
[Service]
Type=forking
PIDFile=/var/run/tomcat.pid
User=tomcat
Group=tomcat
Environment=JAVA_HOME=/path/to/java
Environment=CATALINA_HOME=/opt/tomcat
...
Restart=on-failure
ExecStart=/opt/tomcat/bin/startup.sh
ExecStop=/opt/tomcat/bin/shutdown.sh
[Install]
WantedBy=multi-user.target …Run Code Online (Sandbox Code Playgroud) 我正在尝试在运行Debian 8.1的机器上使用Uwsgi和supervisor部署Django应用程序.
当我重新启动时,sudo systemctl restart supervisor它无法重启一半的时间.
$ root@host:/# systemctl start supervisor
Job for supervisor.service failed. See 'systemctl status supervisor.service' and 'journalctl -xn' for details.
$ root@host:/# systemctl status supervisor.service
? supervisor.service - LSB: Start/stop supervisor
Loaded: loaded (/etc/init.d/supervisor)
Active: failed (Result: exit-code) since Wed 2015-09-23 11:12:01 UTC; 16s ago
Process: 21505 ExecStop=/etc/init.d/supervisor stop (code=exited, status=0/SUCCESS)
Process: 21511 ExecStart=/etc/init.d/supervisor start (code=exited, status=1/FAILURE)
Sep 23 11:12:01 host supervisor[21511]: Starting supervisor:
Sep 23 11:12:01 host systemd[1]: supervisor.service: control process exited, code=exited …Run Code Online (Sandbox Code Playgroud) 服务(比如bar.service)依赖于另一个服务(比如foo.service),如下所示
酒吧的服务文件:
[Unit]
After=foo.service
Requires=foo.service
...
Run Code Online (Sandbox Code Playgroud)
如果foo.service重新启动(手动或由于错误),bar.service如何自动重启?
我想从Jinja2模板安装systemd服务.我该怎么做呢?
我是否必须使用copy模块将文件复制到/lib/systemd/system,然后使用systemd模块启用它?
有没有更好的办法?