标签: systemd

通过python启动systemd服务

有没有办法通过python启动/重启systemd服务?

我知道我可以进行系统调用 - 但是我也可以用shell脚本编写这个...

from subprocess import call
call(["systemctl", "restart service"])
Run Code Online (Sandbox Code Playgroud)

我听说systemd有一些python绑定,但据我所见,它们只覆盖了期刊

python systemd

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

linux在systemd中启动脚本

我可以在下面执行此启动服务,一旦运行就没有错误显示,但下面的服务器脚本不运行!

ln /lib/systemd/aquarium.service aquarium.service
systemctl daemon-reload
systemctl enable aquarium.service
systemctl start aquarium.service
Run Code Online (Sandbox Code Playgroud)

谢谢

aquarium.service:

[Unit]
Description=Start aquarium server

[Service]
WorkingDirectory=/home/root/python/code/aquarium/
ExecStart=/bin/bash server.* start
KillMode=process

[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)

这是server.sh脚本

#!/bin/bash

PID=""

function get_pid {
   PID=`pidof python ./udpthread.py`
}

function stop {
   get_pid
   if [ -z $PID ]; then
      echo "server is not running."
      exit 1
   else
      echo -n "Stopping server.."
      kill -9 $PID
      sleep 1
      echo ".. Done."
   fi
}


function start {
   get_pid
   if [ -z $PID ]; then
      echo  "Starting …
Run Code Online (Sandbox Code Playgroud)

linux bash boot startup systemd

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

在CoreOS cloud-config中执行命令(例如添加交换)

我看到,与标准cloud-config文件不同,runcmdCoreOS cloud-config文件中没有选项.目前,我通过向我添加以下内容来启用CoreOS机器上的交换cloud-config:

units:
    - name: swap.service
      command: start
      content: |
        [Unit]
        Description=Turn on swap

        [Service]
        Type=oneshot
        Environment="SWAPFILE=/1GiB.swap"
        RemainAfterExit=true
        ExecStartPre=/usr/sbin/losetup -f ${SWAPFILE}
        ExecStart=/usr/bin/sh -c "/sbin/swapon $(/usr/sbin/losetup -j ${SWAPFILE} | /usr/bin/cut -d : -f 1)"
        ExecStop=/usr/bin/sh -c "/sbin/swapoff $(/usr/sbin/losetup -j ${SWAPFILE} | /usr/bin/cut -d : -f 1)"
        ExecStopPost=/usr/bin/sh -c "/usr/sbin/losetup -d $(/usr/sbin/losetup -j ${SWAPFILE} | /usr/bin/cut -d : -f 1)"

        [Install]
        WantedBy=local.target
Run Code Online (Sandbox Code Playgroud)

然后在初始化我的CoreOS映像后,我必须ssh进入机器并运行:

sudo fallocate -l 1024m /1GiB.swap && sudo chmod 600 /1GiB.swap \
&& …
Run Code Online (Sandbox Code Playgroud)

swapfile systemd digital-ocean coreos

11
推荐指数
2
解决办法
2895
查看次数

如何在down时使用systemD重启服务?

在我的服务器上,我使用弹性搜索,它经常下降,结果是我的用户500错误.

我知道systemD现在是管理服务的参考.那个我能接受.

如何在发生故障时自动重启弹性搜索服务?我找到了重新启动它的方法,但没有自动重启,没有我检查它是否已关闭.

linux service debian monitor systemd

11
推荐指数
1
解决办法
6937
查看次数

systemd服务启动问题

这是我第一次使用systemd并且对某些事情有点不确定.

我已经设置了一个服务(用于在tomcat下运行的geoserver):

[Unit]
Description=Geoserver
After=network.target

[Service]
Type=oneshot
ExecStart=/usr/local/geoserver/bin/startup-optis.sh
ExecStop=/usr/local/geoserver/bin/shutdown-optis.sh
User=geoserver

[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)

启动脚本执行exec来运行java/tomcat.从命令行启动服务似乎有效:

 sudo systemctl start geoserver
Run Code Online (Sandbox Code Playgroud)

但是命令直到我ctrl-c才返回,这对我来说似乎不对.之后java进程仍在运行并且正常运行.我不愿重新启动盒子来测试这个,以防这会在init期间导致问题并且它是一台远程机器,让别人解决它会很痛苦.

centos systemd

11
推荐指数
1
解决办法
7113
查看次数

如何让systemd用Puma重启Rails App

我一直在努力这一周,现在似乎找不到答案.我已经用Capistrano部署了我的Rails应用程序.我使用Puma作为服务器.

当我部署时,一切正常.问题是让Puma在重启和/或崩溃时启动.

为了获得部署设置,我使用了本教程.我也在使用RVM.我似乎得到的问题是让服务启动Puma.这是我用过的(服务文件):

[Unit]
Description=Puma HTTP Server
After=network.target

[Service]
Type=simple

#User=my-user

WorkingDirectory=/home/my-user/apps/MyApp/current

ExecStart=/home/my-user/apps/MyApp/current/sbin/puma -C /home/my-user/apps/MyApp/shared/puma.rb

Restart=always

[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)

这不起作用.我开始认为问题是没有为所有用户安装Ruby,所以我为所有用户安装了RVM,但仍然遇到了同样的问题.我的服务器只有root和my-user.

看看Capistrano如何部署,它运行的命令是:cd /home/my-user/apps/MyApp/current && ( RACK_ENV=production /home/my-user/.rvm/bin/rvm default do bundle exec puma -C /home/my-user/apps/MyApp/shared/puma.rb --daemon ).如果我使用上述命令,我会收到来自Systmd的错误,抱怨缺少参数.所以我用它编写了一个脚本并获得了服务文件来调用这个脚本来启动应用程序.

这也行不通.需要注意的是,如果我调用脚本从任何服务器上的脚本,并启动应用程序,因此其对配置Systemd一个问题,但我无法弄清楚什么是错的,我不知道如何调试它.我在System的网站上看过调试页面,但它对我没有帮助.如果我systemctl status puma.service全部运行它会告诉我该服务处于失败状态,但它没有告诉我如何或为什么.

另外值得注意的是:如果我bundle exec puma -C /home/my-user/apps/MyApp/shared/puma.rb从我的App文件夹运行它可以正常工作,那么如何使用Systemd服务复制此命令?

linux ruby-on-rails nginx systemd puma

11
推荐指数
2
解决办法
5998
查看次数

通过tomcat.service为tomcat8设置umask

我正在尝试为tomcat 8实例设置自定义umask,试图通过在systemd tomcat单元中使用UMask指令使其成为一种好方法,如此处所示,没有运气.

我想设置022 umask,因为公司开发人员需要访问tomcat /应用程序日志,并且它们与tomcat用户不在同一组中....

疯狂的是systemd doc说:

控制文件模式创建掩码.采用八进制表示法访问模式.有关详细信息,请参阅umask(2).默认为0022.

但是日志(application/tomcat)设置为640(不是预期的755):

-rw-r----- 1 top top 21416 Feb  1 09:58 catalina.out
Run Code Online (Sandbox Code Playgroud)

我的服务文件:

# Systemd unit file for tomcat
[Unit]
Description=Apache Tomcat Web Application Container
After=syslog.target network.target

[...]

User=top
Group=top
UMask=0022

[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)

有什么想法吗?

谢谢

umask systemd tomcat8

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

尝试使用systemd在ubuntu服务器上运行apache airflow

我正在尝试使用systemd在ubuntu服务器上运行气流.我已经按照快速入门指南和气流文档中的教程进行了操作,并设法安装了气流并使用以下命令成功运行它:

airflow webserver -p 8080
Run Code Online (Sandbox Code Playgroud)

在使用配置文件安装systemd和大量试验和错误后,我设法使用该命令运行气流

sudo systemctl start airflow
Run Code Online (Sandbox Code Playgroud)

气流持续运行一周,直到今天我用命令重新启动它

sudo systemctl restart airflow
Run Code Online (Sandbox Code Playgroud)

sudo systemctl status airflow现在运行给我以下两条消息之一:

? airflow.service - Airflow webserver daemon
 Loaded: loaded (/lib/systemd/system/airflow.service; enabled; vendor preset: enabled)
 Active: activating (auto-restart) (Result: exit-code) since Wed 2018-09-12 09:23:01 UTC; 1s ago
Process: 3115 ExecStart=/opt/miniconda3/bin/airflow webserver -p 8080 --pid /home/user/airflow/airflow-webserver.pid --daemon (code=exited, status=1/FAILURE)
Main PID: 3115 (code=exited, status=1/FAILURE)

Sep 12 09:23:01 server-service systemd[1]: airflow.service: Main process exited, code=exited, status=1/FAILURE
Sep 12 …
Run Code Online (Sandbox Code Playgroud)

apache ubuntu systemd airflow

11
推荐指数
2
解决办法
1736
查看次数

Python子进程,实时打印颜色并保存标准输出

在保存结果的同时打印子进程的输出并不是一个新问题,并且之前已经多次回答过,例如: https: //stackoverflow.com/a/28319191/5506400 这对我不起作用,因为我正在尝试维护打印外壳颜色。例如,当一个人走时systemctl status application,它的打印会显示为绿色。上述方法都依赖于从子进程中一行一行地读取,但在我看来,那时颜色信息已被剥离和丢失。

我尝试创建一个对象,该对象远离标准输出打印并将它们保存到变量中:

from subprocess import *
import sys

class Tee():
    def __init__(self):
        self.content = ''
        self.stdout = sys.stdout
        sys.stdout = self
    def __enter__(self):
        return self
    def __exit__(self, *args):
        pass
    def __del__(self):
        sys.stdout = self.stdout
    def write(self, data):
        self.content += data
        self.stdout.write(data)
    def flush(self):
        self.content = ''

with Tee() as tee:
    # Saves print to tee.content
    print("Hello World")

    # This line does not save prints to tee.content    
    run(['apt-get', 'update'])

    # raises an error that …
Run Code Online (Sandbox Code Playgroud)

python subprocess python-3.x systemd

11
推荐指数
1
解决办法
6480
查看次数

运行systemctl enable时"执行操作失败:参数无效"是什么意思?

我已经创建了一个systemd服务文件(专门用于svnserve;我实际上是使用这里的示例/sf/answers/2840883321/),当我启用它时,输入

sudo systemctl enable svnserve
Run Code Online (Sandbox Code Playgroud)

我得到了答复

Failed to execute operation: Invalid argument
Run Code Online (Sandbox Code Playgroud)

运行

sudo systemctl status svnserve
Run Code Online (Sandbox Code Playgroud)

产量

? svnserve.service - Subversion protocol daemon
   Loaded: loaded (/etc/systemd/system/svnserve.service; enabled; vendor preset: enabled)
   Active: inactive (dead)
Run Code Online (Sandbox Code Playgroud)

没有给我任何关于任何错误的线索.然后我可以在没有任何错误的情况下启动服务,它似乎正在按预期运行,并且在启动systemctl状态后,我仍然不知道任何错误:

? svnserve.service - Subversion protocol daemon
   Loaded: loaded (/etc/systemd/system/svnserve.service; enabled; vendor preset: enabled)
   Active: active (running) since Tue 2018-01-09 22:10:14 UTC; 6s ago
  Process: 9677 ExecStart=/usr/bin/svnserve $DAEMON_ARGS (code=exited, status=0/SUCCESS)
 Main PID: 9678 (svnserve)
    Tasks: 1
   Memory: 964.0K
      CPU: 2ms
   CGroup: /system.slice/svnserve.service
           ??9678 /usr/bin/svnserve …
Run Code Online (Sandbox Code Playgroud)

systemd

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