Articles of systemd

在systemd单元文件的相同EnvironmentFile中声明的另一个variables中使用一个variables

我有一个相当长的parameter passing给一个可执行文件。 我创build了一个简单的systemd单元文件,效果很好: [Unit] Description=My Service [Service] WorkingDirectory=/opt/my-service EnvironmentFile=-/opt/my-service/environment ExecStart=/usr/bin/java $JAVA_ARGS -jar /opt/my-service/my-service.jar [Install] WantedBy=multi-user.target 在/opt/my-service/environment ,我有以下(只是一个例子): JAVA_ARGS=-server -Xms1500m -Xmx1500m -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled -XX:NewRatio=1 -XX:SurvivorRatio=4 -Djava.io.tmpdir=/opt/my-service/tmp 我希望能够把这个variables分解成几个,使其更容易理解。 类似的东西: JAVA_TMP_DIR=/opt/my-service/tmp JAVA_JVM_ARGS=-server -Xms1500m -Xmx1500m -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled -XX:NewRatio=1 -XX:SurvivorRatio=4 JAVA_ARGS=$JAVA_JVM_ARGS -Djava.io.tmpdir=$JAVA_TMP_DIR 但是当我使用它时, $JAVA_JVM_ARGS和$JAVA_TMP_DIR的值不会被replace,而是按$JAVA_ARGS打印在$JAVA_ARGS (即被正确replace): [root@ip-10-0-1-140 system]# systemctl status my-service my-service.service – My Service Loaded: loaded (/etc/systemd/system/my-service.service; enabled) […]

ionice为systemd日记

发生在我的生产机器上的日志太多,导致journalctl“冻结”生产networking服务器(通过吃掉所有的IO)。 是的,我logging了很多(每3-4小时〜4GB压缩)。 由于我的服务器应该首先赚钱,而且在空闲时间做一些日志logging,我想改变journald(nice和ionice)的优先级。 为什么在Debian中,日志的优先级不是默认设置的? (对我来说,所有configuration看起来都合理)这种configuration是否有问题? 在Debian中改变优先级的最好方法是什么?

Systemd套接字激活可以在hibernate后重新启动服务吗?

我们有一个套接字服务设置为在UNIX域套接字(AF_UNIX)上工作。 我们使用systemd的套接字激活来创build套接字并pipe理服务。 我想要做的是,如果服务空闲一段时间,它将closures,systemd将重新激活下一个连接的服务。 这可能与systemd? 我不想实现inetd风格单sockets每请求处理。

交换分区没有安装在启动

我有一个新的SLES12安装和交换不安装的问题。 这是一个DL360 G6服务器,在RAID1中有P410和两个146GB的硬盘。 单个/ dev / sda具有用于交换的sda1和用于ext4根分区的sda2的MBR。 系统210-95.1 基本上我没有在启动时进行交换安装,只有一个手动swapon帮助。 # journalctl systemd[1]: Dependency failed for /dev/disk/by-uuid/307a84ab-a6cc-40f0-a84e-559aa99f364d. systemd[1]: Job dev-disk-by\x2duuid-307a84ab\x2da6cc\x2d40f0\x2da84e\x2d559aa99f364d.device/start timed out. systemd[1]: Timed out waiting for device dev-disk-by\x2duuid-307a84ab\x2da6cc\x2d40f0\x2da84e\x2d559aa99f364d.device. # systemctl restart dev-disk-by\\x2duuid-307a84ab\\x2da6cc\\x2d40f0\\x2da84e\\x2d559aa99f364d.swap A dependency job for dev-disk-by\x2duuid-307a84ab\x2da6cc\x2d40f0\x2da84e\x2d559aa99f364d.swap failed. See 'journalctl -xn' for details. # cat /etc/fstab UUID=7b830caa-bca2-4617-b8cd-3145726c288a / ext4 acl,user_xattr 1 1 #/dev/sda1 swap swap […]

使用systemd启动一个带有约束的系统

我有一个由多个进程和docker容器组成的大系统。 我想系统初始化系统,但我有几个进程之间的约束: 应该有一个特定的开始顺序的过程 每个进程在下一个启动之前应该完成初始化 在其中一个进程下降的情况下,一些进程应该按照约束编号1以相同的顺序重新初始化 我应该能够启动所有的系统(所有的进程),并停止一个命令。 我已经阅读了几个关于如何使用systemd的教程: https://www.digitalocean.com/community/tutorials/understanding-systemd-units-and-unit-files https://coreos.com/docs/launching-containers/launching/getting-started-with-systemd/ 和更多 但是,如何与目标合作,实施适当的服务等级仍然是我的一个谜。 任何人都可以请build议一个更好的教程或解释给我不知何故? 或者,如果我错了,不可能用systemd来包含我所有的约束,请说出来并解释。 谢谢,

Systemd / ssh:无法分配内存

我有一个主机(Ubuntu 14.04.4 LTS 64位,内核3.13.0-85-通用),有很多并发的SSH连接。 SSHlogin最近开始失败,日志说: sshd[26057]: pam_systemd(sshd:session): Failed to create session: Cannot allocate memory 我甚至不知道哪个子系统正在执行这个限制。 机器本身有4 GB可用RAM和0字节的交换使用(8GB): 我写了一个小C程序,mallocs RAM的演出,它没有问题,所以它不是一个系统RAM的东西。 我检查了ulimit设置,并查看了/proc/<pid>/limits来确定是否定义了操作系统限制,但都是无限的。 我还研究了systemd的资源限制 ,比如/etc/systemd/system/sshd.service的MemoryLimit参数。 似乎没有任何影响。 任何想法这个内存限制来自哪里? 编辑: 实际上,systemd被安装是奇怪的。 这些是systemd软件包: #aptitude search systemd | grep“^ i” i libpam-systemd – 系统和服务pipe理器 – PAM模块 一个libsystemd-daemon0 – systemd实用程序库 我是一个libsystemd-login0 – systemdlogin实用程序库 一个systemd-services – systemd运行时服务 systemd的systemd-shim-shim 它是版本204-5ubuntu20.19。 apt-cache rdepends是不是真的给了我一个明确的想法,为什么安装。 它也没有完全安装。 systemctl命令不可用,一个。 Edit2:由于dbus,systemd组件似乎被包含在内。 […]

如何正确命名systemd mount单元?

我试图通过systemd启动后自动挂载CephFS 我有下一个单位: [Unit] SourcePath=/etc/fstab DefaultDependencies=no After=remote-fs-pre.target After=network.target Wants=network.target After=network-online.target Wants=network-online.target Conflicts=umount.target Before=umount.target [Mount] What=ceph-node1:6789,ceph-node2:6789,ceph-node3:6789:/dev Where=/mnt/cephfs-dev Type=ceph Options=name=devuser,secretfile=/etc/ceph/cephuser.secret [Install] WantedBy=remote-fs.target 据我所知, Where=设置必须与单元名称匹配。 我接下来做: [root@centos system]# systemd-escape -p –suffix=mount '/mnt/cephfs-dev' mnt-cephfs\x2ddev.mount [root@centos system]# vi /etc/systemd/system/mnt-cephfs\\x2ddev.mount 但是出了点问题: [root@centos system]# systemctl status mnt-ceph\\x2ddev.mount ● mnt-ceph\x2ddev.mount – /mnt/cephfs-dev Loaded: error (Reason: Invalid argument) Active: inactive (dead) Where: /mnt/cephfs-dev What: ceph-node1:6789,ceph-node2:6789,ceph-node3:6789:/dev […]

DNS Named.service isc_stdio_open'data / named.run'failed:permission denied

嗨,大家好,我有问题启动systemctl named.service 我试图安装绑定和configuration一切,使公有领域的名称工作,但我跑了这个问题。 systemctl status named.service 我得到这个错误 ● named.service – Berkeley Internet Name Domain (DNS) Loaded: loaded (/usr/lib/systemd/system/named.service; enabled; vendor preset: disabled) Active: failed (Result: exit-code) since Sat 2016-05-07 07:08:12 EDT; 21min ago Process: 29283 ExecStart=/usr/sbin/named -u named $OPTIONS (code=exited, status=1/FAILURE) Process: 29280 ExecStartPre=/bin/bash -c if [ ! "$DISABLE_ZONE_CHECKING" == "yes" ]; then /usr/sbin/named-checkconf -z […]

系统单元模板,用于从不同目录运行的实例

我正在尝试创build一个新的systemd单元模板文件,该文件将用于启动服务器程序的多个实例,每个实例运行在不同的目录之外。 即我需要ExecStart参数根据实例不同而不同。 我试图让实例的path是下面的实例名称。 我有以下单元文件/etc/systemd/system/[email protected] : [Unit] Description=server instance '%I' Requires=… Wants=… [Service] Type=simple ExecStart=%I/bin/server.sh PIDFile=%I/server.pid [Install] WantedBy=multi-user.target 我做一个守护进程重新加载: $ sudo systemctl daemon-reload 我试着用下面的例子开始一个实例: $ sudo systemctl start myserver@/path/to/instance1.service 我从这个说法看到错误状态的细节。 所以,我这样做: $ sudo systemctl status myserver@/path/to/instance1.service 我看到ExecStartpath不是绝对的错误: May 17 16:04:46 myhost systemd[1]: [/etc/systemd/system/[email protected]:9] \ Executable path is not absolute, ignoring: %I/bin/server.sh May 17 16:04:46 myhost systemd[1]: […]

使用cored中的systemd启动块设备

我使用以下systemd单元挂载/dev/vdb1到/media/esdata : 该单元位于/etc/systemd/system/media-esdata.mount : [Unit] Description=Mount cinder volume Before=docker.service [Mount] What=/dev/vdb1 Where=/media/esdata Options=defaults,noatime,noexec 但是这不会在重新启动时开始。 我似乎无法启用这个单位: $ sudo systemctl enable media-esdata.mount The unit files have no [Install] section. They are not meant to be enabled using systemctl. Possible reasons for having this kind of units are: 1) A unit may be statically enabled by being symlinked […]