标签: systemd

使用多个execStart进行系统化

我会知道是否可以使用以不同输入参数开头的相同脚本创建服务.如:

[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)

可能吗?然后它会启动到串行模式?还是分成两个不同的过程?最好的祝福

linux service systemd server

33
推荐指数
2
解决办法
5万
查看次数

如何作为系统服务运行时将输出管道传输到文件?

在将程序作为systemd服务运行时,我无法将STDOUT和STDERR传送到文件.我已经尝试将以下内容添加到.service文件中:

ExecStart=/apppath/appname > /filepath/filename 2>&1
Run Code Online (Sandbox Code Playgroud)

但这不起作用.输出结果在/ var/log/messages中,可以使用journalctl查看,但我想要一个单独的文件.

我也试过设置,StdOutput=tty但找不到将其重定向到文件的方法.

任何帮助,将不胜感激.

linux stdout fedora stderr systemd

32
推荐指数
2
解决办法
3万
查看次数

journalctl - 删除特定单元的日志

随着journalctl,就可以删除旧的日志,通过指定的最大磁盘空间,他们可以使用,也可以有最大年龄,或(使用选件单独的日志文件的最大数量--vacuum-size,--vacuum-time--vacuum-files).

有没有办法将此删除限制在特定的系统单元?

journalctl -u <unit> --vacuum-time=2d似乎没有按预期工作:根据文档,-u只有在显示日志时才有效.

systemd

32
推荐指数
1
解决办法
1万
查看次数

使用setup.py将python项目安装为systemd服务

我有一个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)

python ubuntu setup.py systemd

31
推荐指数
1
解决办法
5902
查看次数

弹性搜索最大虚拟内存区域vm.max_map_count [65530]太低,至少增加[262144]

我有一个针对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)

limit elasticsearch cgroups systemd

28
推荐指数
10
解决办法
3万
查看次数

“sudo systemctl enable docker”不可用:在 WSL2 上启动时自动运行 Docker(使用“sysvinit”/“init”命令或解决方法)

我在 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 守护进程

\n
sudo systemctl enable docker\n
Run Code Online (Sandbox Code Playgroud)\n

而不是在每次启动时重新启动它

\n
sudo systemctl start docker\n
Run Code Online (Sandbox Code Playgroud)\n

这两个命令都避免了“无法连接到位于 unix:///var/run/docker.sock 的 Docker 守护进程。docker 守护进程正在运行吗?”。

\n

当使用两者中的任何一个时,我得到

\n
\n

使用 \n/lib/systemd/systemd-sysv-install 将 docker.service 的状态与 SysV 服务脚本同步。执行:\n/lib/systemd/systemd-sysv-install 启用 docker

\n
\n

测试运行显示,docker 尚未运行:

\n
\n
docker run hello-world \n
Run Code Online (Sandbox Code Playgroud)\n

docker:无法连接到 \nunix:///var/run/docker.sock 处的 Docker 守护程序。docker 守护进程是否正在运行?请参阅\n\'docker run --help\'。

\n
\n

之前的一些步骤,此时我也收到了不同的消息:

\n
\n …

service systemd docker systemctl wsl-2

28
推荐指数
2
解决办法
5万
查看次数

只使用systemd,我从JSVC获得了什么好处?

Tomcat文档描述了编译和安装JSVC的过程,该过程可用于将Tomcat作为守护进程运行.据我了解,JSVC有两个好处:

  1. 它以root身份启动,允许使用特权端口(如80或443).
  2. 它创建了一个"控制器进程",它将监视"受控进程"(主Java线程)并在失败时重新启动进程.

我一直在学习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)

java tomcat jsvc systemd centos7

25
推荐指数
2
解决办法
1万
查看次数

主管未能重启一半的时间

我正在尝试在运行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)

debian uwsgi supervisord systemd

21
推荐指数
1
解决办法
1万
查看次数

如果重新启动其依赖服务,如何重新启动服务

服务(比如bar.service)依赖于另一个服务(比如foo.service),如下所示

酒吧的服务文件:

[Unit]
After=foo.service
Requires=foo.service
...
Run Code Online (Sandbox Code Playgroud)

如果foo.service重新启动(手动或由于错误),bar.service如何自动重启?

linux systemd

21
推荐指数
3
解决办法
1万
查看次数

如何使用Ansible安装systemd服务?

我想从Jinja2模板安装systemd服务.我该怎么做呢?

我是否必须使用copy模块将文件复制到/lib/systemd/system,然后使用systemd模块启用它?

有没有更好的办法?

systemd ansible

21
推荐指数
1
解决办法
2万
查看次数