首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我不明白为什么我的systemd服务无法创建/var/run/redis

我不明白为什么我的systemd服务无法创建/var/run/redis
EN

Ask Ubuntu用户
提问于 2016-04-29 17:53:41
回答 1查看 2.6K关注 0票数 4

这是在ubuntu-16.04

我尝试在/etc/system/systemd/ redis -custom.service中编写自定义redis服务。

服务失败(尽管redis启动,并重新启动),因为/var/run/redis不存在,并且无法读取pidfile

默认的redis-service使用tmpfiles.d创建/var/运行

代码语言:javascript
复制
cat /usr/lib/tmpfiles.d/redis-server.conf
d /run/redis 2775 redis redis -

我想把它合并到服务文件中,所以我查看了/lib/system/systemd/opendkim.service中的opendkim实现,它使用了一种不同的策略,在释放特权之前将mkdir放在服务文件中:

代码语言:javascript
复制
PermissionsStartOnly=true
ExecStartPre=-/bin/mkdir -p /var/run/opendkim
ExecStartPre=-/bin/chown opendkim.opendkim /var/run/opendkim

好主意。所以我试着用它来对付瑞迪斯:

代码语言:javascript
复制
PermissionsStartOnly=true
ExecStartPre=-/bin/mkdir -p /var/run/redis
ExecStartPre=-/bin/chown redis.redis /var/run/redis

这在mkdir上每次都会因为缺乏特权而失败。我设置了一个空服务器来测试这一点,并且只在上面运行redis/opendkim,这样我就可以尝试查找opendkim可能做的不同的文件。我搞不懂这个。

我可以通过指定RuntimeDirectory=/var/run/redis来为redis创建目录,这是一个更好的解决方案。然而,我想了解为什么开放源码的实现是有效的。我好像漏掉了什么。

EN

回答 1

Ask Ubuntu用户

发布于 2018-05-08 16:46:18

我已经为同样的问题挣扎了一个小时.

TL;DR:你应该把

ReadOnlyDirectories=-/

在……里面

/lib/systemd/system/redis-server.service

并作为sudo systemctl daemon-reload发行

详细说明:

我运行Redis 3.2.6在一个RisanStrech9.4OS上,并已将/var/log安装为tmpfs,以降低我的RaspberPI3B+‘S microSD卡上的写量。

代码语言:javascript
复制
ExecStartPre=-/bin/mkdir /var/log/redis
ExecStartPre=-/bin/chmod 750 /var/log/redis
ExecStartPre=-/bin/chown redis:redis /var/log/redis

我还在Redis的服务文件中添加了一些预启动命令,如上面所示,但是它仍然无法创建目录,因为它在启动时一直在抱怨奇怪的Read-only file system问题:

代码语言:javascript
复制
May 08 19:17:48 pisky systemd[1]: Starting Advanced key-value store...
-- Subject: Unit redis-server.service has begun start-up
-- Defined-By: systemd
-- Support: https://www.debian.org/support
--
-- Unit redis-server.service has begun starting up.
May 08 19:17:48 pisky mkdir[20564]: /bin/mkdir: cannot create directory ‘/var/log/redis’: Read-only file system
May 08 19:17:48 pisky chmod[20567]: /bin/chmod: cannot access '/var/log/redis': No such file or directory
May 08 19:17:48 pisky chown[20570]: /bin/chown: cannot access '/var/log/redis': No such file or directory
May 08 19:17:49 pisky run-parts[20572]: run-parts: executing /etc/redis/redis-server.pre-up.d/00_example
May 08 19:17:49 pisky redis-server[20580]: *** FATAL CONFIG FILE ERROR ***
May 08 19:17:49 pisky redis-server[20580]: Reading the configuration file, at line 163
May 08 19:17:49 pisky redis-server[20580]: >>> 'logfile /var/log/redis/redis-server.log'
May 08 19:17:49 pisky redis-server[20580]: Can't open the log file: No such file or directory
May 08 19:17:49 pisky wpa_supplicant[457]: wlan0: Failed to initiate sched scan
May 08 19:17:49 pisky systemd[1]: redis-server.service: Control process exited, code=exited status=1
May 08 19:17:49 pisky systemd[1]: Failed to start Advanced key-value store.

使用它的服务文件似乎有一些自相矛盾的参数,即:

代码语言:javascript
复制
# had to comment the below out, apparently this RO is exclusive
#ReadOnlyDirectories=-/
ReadWriteDirectories=-/var/lib/redis
ReadWriteDirectories=-/var/log/redis
ReadWriteDirectories=-/var/run/redis

ReadOnlyDirectories指令将/设置为只读,但由于/var/log/是在/下挂载的,它也被设置为只读.这个问题是描述了吉特布,我尝试了各自提出的解决方案,但除了注释掉上面的一行之外,它们都没有工作.

票数 1
EN
页面原文内容由Ask Ubuntu提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://askubuntu.com/questions/765067

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档