Questions tagged «systemd»

systemd是Linux的SystemV和Upstart初始化守护程序的替代方法。它旨在提供一个更好的框架来表达服务的依赖性,允许在系统启动时并行完成更多工作,并减少Shell开销。

3
有没有将密码传递到Systemd Unit文件的典型方法?
我想使用systemd单位文件启动服务。此服务需要密码才能启动。我不想将密码以明文形式存储在systemd单元文件中,因为它是世界可读的。我也不想以交互方式提供此密码。 如果要为此编写普通脚本,则将凭据存储在具有受限权限(400或600)的root拥有的文件中,然后将其作为脚本的一部分读取。是否有任何特定的systemd风格的方法可以执行此操作,还是应该遵循与常规Shell脚本中相同的过程?

2
分组系统服务
我已经.service为构成我正在使用的系统的不同部分编写了大约六个文件。能够逐个启动整个系统非常有用,但我也想拥有一个可以在一次调用中启动整个系统的单元systemctl。 最好的方法是什么?
10 systemd 

3
systemd唤醒后如何运行用户脚本?
当我的debian jessie桌面盒从睡眠中唤醒时(通过新的闪亮的systemd),我的鼠标设置恢复为默认设置,重置了自定义设置 xinput set-prop 12 'Device Accel Constant Deceleration' 2.5 当我登录时运行。 如何在唤醒时运行任意用户脚本?(假设用户是X会话的所有者) 据我所知,以下是我对systemd设置所做的唯一定制(是的,我知道这是完全错误的,因为它不适用于任意用户,但是我还没有弄清楚该如何做...这有点关系) 另外,作为当前正在使用X屏幕的用户,如何在唤醒之前运行任意用户脚本? cat /etc/systemd/system/i3lock.service #systemctl enable i3lock.service [Unit] Description=i3lock Before=sleep.target [Service] User=fommil Type=forking Environment=DISPLAY=:0 ExecStart=/usr/bin/i3lock -c 000000 [Install] WantedBy=sleep.target
10 systemd  suspend 

2
在systemd脚本中分叉
我希望systemd服务处理派生(我的文件本身无法处理派生。因此,我依靠systemd来处理) 我的.service文件: [Unit] Description=swamp services management service After=syslog.target [Service] Type=forking ExecStart=/usr/bin/swamp [Install] WantedBy=multi-user.target 题 是否Type=forking为我要达到的目标指定了足够的数量?还是期望在upstart中分叉实际上告诉了upstart(如果我理解正确,但不确定,我是新手,那么我在编写初始化脚本时就知道)我的服务将处理分叉/守护进程。
10 systemd 


4
Fedora 25并禁用在端口111上监听的任何内容
我有一个Fedora 25 x86_64独立工作站。正在侦听端口111(通过nmap扫描标识): $ sudo lsof -i :111 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME systemd 1 root 36u IPv4 15170 0t0 TCP *:sunrpc (LISTEN) systemd 1 root 37u IPv4 15171 0t0 UDP *:sunrpc systemd 1 root 38u IPv6 15172 0t0 TCP *:sunrpc (LISTEN) systemd 1 root 39u …

1
为所有具有systemd cgroups的用户设置默认资源限制
我可以为用户设置内存限制,如下所示: systemctl set-property user-UID.slice MemoryHigh=24G 有没有一种方法可以适用于所有用户?我希望每个用户获得24G,而不是所有用户进程总共获得24G(我认为这是user.slice直接将其设置为打开的结果)。

1
即使盖上了外接显示器,盖也无法悬吊
我的笔记本电脑装有Fedora 22和Gnome 3.16.4。通常,如果关闭盖子,它将挂起。但是,在连接了外部显示器(通过VGA)的情况下,将gnome桌面简单地转移到外部显示器上,而无需关闭盖子。 但是,即使连接了外接显示器,我也希望笔记本电脑能够挂起。这是我检查并尝试过的方法: 当我打开和关闭盖子时,systemd-logind请务必记录下动作,如所见journalctl -b -u systemd-logind。 Dec 09 08:39:39 workstation systemd-logind[980]: Lid closed. Dec 09 08:39:47 workstation systemd-logind[980]: Lid opened. 我已配置/etc/systemd/logind.conf为以下内容: [Login] #NAutoVTs=6 #ReserveVT=6 #KillUserProcesses=no #KillOnlyUsers= #KillExcludeUsers=root #InhibitDelayMaxSec=5 #HandlePowerKey=poweroff #HandleSuspendKey=suspend #HandleHibernateKey=hibernate #HandleLidSwitch=suspend HandleLidSwitchDocked=suspend #PowerKeyIgnoreInhibited=no #SuspendKeyIgnoreInhibited=no #HibernateKeyIgnoreInhibited=no #LidSwitchIgnoreInhibited=yes #IdleAction=ignore #IdleActionSec=30min #RuntimeDirectorySize=10% #RemoveIPC=yes 具体来说,我注释掉了HandleLidSwitchDocked=ignore一行并将其更改为suspend。其余的(由systemd表示)是默认的。但是重新启动后,它不起作用。 我的视频卡是“英特尔公司Broadwell-U集成图形”(由输出lspci)。由于它不是nvidia,我认为它不受此线程中讨论的bug的影响吗? 那么,即使连接了外接显示器,如何将Fedora / Gnome配置为挂起?

1
如何将服务设置为在systemd启动autofs之后启动
我必须在具有systemd的RHEL7计算机上设置许可证服务器。许可证服务器应在引导时启动,并从网络上的共享磁盘加载许可证文件。因此,我需要等待网络启动以及等待autofs完成NFS磁盘的安装。我有此服务文件: [Unit] Description=Flexnet license server Wants=network.target network-online.target autofs.service After=network.target network-online.target autofs.service [Service] Type=forking User=licenseuser Group=devusers ExecStart=/soft/flexera/glnxa64/lmgrd -c /soft/licenses/license.dat -L /home/licenseuser/license.log # Give a reasonable amount of time for the server to start up/shut down TimeoutSec=300 [Install] WantedBy=multi-user.target 该服务在autofs启动之后但在autofs挂载所有磁盘之前启动,因此无法启动许可证服务器。
9 rhel  systemd 

1
CentOS 7的启动速度太快,并且在执行cron脚本时网络还没有准备好
我刚刚从CentOS 6.5升级到7.0,但我不太高兴,因为新版本systemd可能给我带来了问题。似乎仅仅是因为启动速度太快,异步启动进程以及搞乱服务依赖关系。 例如,我有一些脚本设置,crond这些脚本在重启后触发: @reboot /root/scripts/check_gmail.sh @reboot /root/scripts/start_gps_listener.sh 这会导致各种奇怪的错误(仅显示其中之一): Warning: stream_socket_client(): unable to connect to tcp://192.168.20.4:4001 (Network is unreachable) in /root/scripts/check_gmail.php on line 137 ERROR: Network is unreachable (101) 在上面,我正在写一个TCP套接字。对我来说很清楚,crond是在将网络正确初始化为之前启动的network is unreachable。 Apache和MySQL(MariaDB)也是如此。MySQL的启动速度很慢(很多数据),这意味着Apache和我的许多crond启动脚本都失败了,因为调用脚本时MySQL数据库未运行。 我试图建立依赖关系,但是没有任何运气。我已将network和mysql服务附加到[Unit](如所见systemctl list-dependencies)。理想情况下,所有服务都要等到MySQL启动并运行为止: vi /lib/systemd/system/httpd.service [Unit] Description=The Apache HTTP Server After=network.target remote-fs.target nss-lookup.target network.service mysql.service vi /lib/systemd/system/crond.service [Unit] Description=Command …
9 centos  systemd 

2
在systemd Docker容器中继承环境变量
我有一个运行systemd的Docker容器。我想将环境变量传递给它下面的应用程序。 当我从Docker(/sbin/init作为命令行)启动systemd时,Docker将变量公开给systemd,但不公开给子服务。如果我添加systemd.setenv=...到cmdline,则会传递变量。我正在寻找更清洁的解决方案。 如何公开传递给/sbin/init它启动的应用程序的环境变量? % docker run -v /sys/fs/cgroup:/sys/fs/cgroup:ro --privileged -ti \ -e VAR1=1 motiejus/systemd_fedora20 \ init systemd.setenv=VAR2=2 ... Welcome to Fedora 20 (Heisenbug)! ... [ OK ] Reached target Multi-User System. [root@740690365eb0 ~]# env | grep VAR VAR2=2 我希望VAR1=1在运行命令时看到。 换句话说,systemd可以将传递给它的变量传递给它启动的子级吗? 对于Dockerfile,请参阅github存储库。

2
使用systemctl时无法启动named
我无法在Fedora 18 Raspberry Pi旋转上开始使用systemd命名时遇到麻烦。它开始,然后过一会儿超时,然后失败。如果我手动运行named.service中的命令,则named开始就可以了。我不知道systemctl在寻找什么超时或者在哪里调用它。我已经阅读了systemctl,systemd和其他手册页,并且我将继续进行研究,但是如果有人有任何指点,那就太好了。 systemctl status named.service 输出: named.service - Berkeley Internet Name Domain (DNS) Loaded: loaded (/usr/lib/systemd/system/named.service; disabled) Active: failed (Result: timeout) since Tue 2013-01-29 14:36:41 EST; 35min ago Process: 4189 ExecStart=/usr/sbin/named -u named $OPTIONS (code=exited, status=0/SUCCESS) Process: 4186 ExecStartPre=/usr/sbin/named-checkconf -z /etc/named.conf (code=exited, status=0/SUCCESS) Process: 4183 ExecStartPre=/usr/libexec/generate-rndc-key.sh (code=exited, status=0/SUCCESS) …

2
仅以特定用户身份重新启动systemd服务?
我创建了一些基本有效的系统服务: 位置: /etc/systemd/system/multi-user.target.wants/publicapi.service 内容: [Unit] Description=public api startup script [Service] Type=oneshot RemainAfterExit=yes EnvironmentFile=-/etc/environment WorkingDirectory=/home/techops ExecStart=/home/techops/publicapi start ExecStop=/home/techops/publicapi stop [Install] WantedBy=multi-user.target 当我尝试在命令行中以techops用户身份重新启动服务时,得到以下输出: ==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units === Authentication is required to start 'publicapi.service'. Multiple identities can be used for authentication: 1. Myself,,, (defaultuser) 2. ,,, (techops) Choose identity to authenticate as …

1
系统启动和终端启动程序之间的区别
我对程序之间的差异感到好奇。通过systemctl启用时,以systemd开头,而不是/etc/rc.local通过CLI或通过CLI进行启动。 例如,我最近在树莓派上使用shairport-sync。最初,我通过启用sudo systemctl的shairport-sync将shairport-sync设置为启动。 后来,我使用其中的功能在shairport-sync脚本运行之前和发布到连接的设备。 令我惊讶的是,这些脚本在执行shairport-sync时没有kill arecord或aplay 但是,当我通过终端运行脚本时,脚本将执行并杀死arecord和aplay。 为了进一步迷惑自己,我shairport-sync通过终端杀死并启动了它,以查看正在发生的事情的输出。当我这样做时,脚本在设备连接并终止arecord并终止时按预期运行aplay。因此,作为一项修复,我禁用shairport-sync了sysmtectl它并将其设置/etc/rc.local为作为快速修复运行。之后,reboot它按我的预期运行。 这使我相信,单独运行systemd的程序与通过/etc/rc.local或CLI 启动时运行的程序之间存在一些差异。 为什么会这样?这是因为运行级别不同吗?一些黑魔法? 设备连接到时运行的脚本shairport-sync如下:shairportstart.sh #!/bin/sh /usr/bin/sudo /bin/pkill arecord if [ $(date +%H) -ge "18" -o $(date +%H) -le "7" ]; then /usr/bin/amixer set Speaker 40% else /usr/bin/amixer set Speaker 100% fi /home/pi/shScripts/shairportfade.sh& exit 0 这是渐变脚本: shairportfade.sh #!/bin/sh /usr/bin/amixer set Speaker 30- for …

2
是否可以使用systemd根据文件的存在来启动和停止服务?
到目前为止,我的配置是: foo.path [Path] PathExists=/tmp/foo.path [Install] WantedBy=multi.user.target foo.service [Unit] Description=Matt Test BindsTo=foo.path [Service] ExecStart=/bin/sh /home/mpekar/bin/foo.sh PIDFile=/run/foo.pid 这在启动时工作正常,但是在删除/tmp/foo.path时foo.service不会被杀死。有什么方法可以使systemd做到这一点,还是它不是适合该工作的工具?
9 systemd 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.