对于任何使用 systemd 来管理进程并遵循以下规则的操作系统Linux 基金会的文件系统层次结构标准
我最近问除了 systemd 单元文件之外去哪里: 在 Arch Linux 上,我的 systemd 单元文件应该放在哪里?
我想运行一个蟒蛇脚本每 5 分钟一次(不要与调用 python 脚本的 systemd 单元文件脚本混淆)。我读了这个问题的答案: 使用 systemd 每 30 分钟运行一次脚本
这就是我的问题所在。您应该或者可以在哪里存储由 systemd 运行的脚本?是否有为这些保留的位置,特别是在 Arch Linux 上?
- 例如,日志放置在
/var/log
systemd
单元文件放置在/etc/systemd/system
/etc/systemd/system/writehello.service
这是一个示例服务。
[Unit]
Description=Run python script that writes hello in file on /media/5TB/hello.txt
[Service]
Type=oneshot
ExecStart=# <-- This is what I am looking for
[Install]
WantedBy=multi-user.target
/etc/systemd/system/writehello.timer
这是一个相应的计时器。这都是有记录的东西。
[Unit]
Description=test
[Timer]
Persistent=true
OnUnitActiveSec=10s
OnBootSec=10s
[Install]
WantedBy=timers.target
/path/to/writehello.py
这就是我正在寻找的道路。
#!/usr/bin/env python
import os
import datetime
now = datetime.datetime.now()
f1 = open('/media/mydrive/hello.txt','a')
f1.write('hello %s\n' % (now))
f1.close
答案1
我也在思考同样的问题,想看看其他人的意见。我的看法是,/usr/local/sbin
你sbin
把应该由管理员运行的东西放在哪里。
您的分析是正确的,这/usr/local
是专门用于安装不受包管理器管理的内容的位置。但bin
适用于普通用户应该可以运行的东西。无论哪种情况,root
除了/usr/local
.据我所知,这是惯例(对于整个 /usr/ )。
/opt
通常用于系统默认不使用的软件包,用户应该设置一些环境变量以供 bin/man/etc 访问。特定包的目录。阅读我上面提供的链接。
答案2
以下是存储将要运行的内容的理想位置(有关详细信息,请参阅链接):
引用自文件系统层次结构标准 HS v2.3
本地安装的系统管理程序应放置在 /usr/local/sbin 中。
据我所知,当 FHS 文档提到“系统”时,它指的是某个“root”用户。
/usr/local/bin
或者/usr/local/sbin
独特的到此计算机(包管理器不可用,例如脚本、CD 中的软件),即未从公共源安装到所有计算机(不是包管理器)。/usr/local/bin
所有用户都可以运行东西。/usr/local/sbin
stuff只能由root运行(它是系统“二进制”目录)。/usr/bin
不独特(计算机之间共享的东西,例如来自包管理器,即包管理器使用此位置)/root/bin
A根用户可以创建此目录而不是使用/usr/local/sbin
.这是一个存放只有一个东西的好地方根用户运行或可以看到(此文件夹只能由 root 或组 root 执行,因此除 root 之外的任何人都看不到其内容)您甚至可以在其中创建一个 bin 文件夹以保持一致,但无论如何没有人知道:)/home/<user>/bin
标准用户可以创建这个目录。它是存储由 systemd 作为标准用户运行的脚本的好地方。
结论是1号将是存储由 systemd 守护进程/服务运行的脚本的理想位置。
这说得通,
- 这是一个标准位置
- 它与您的包管理器包隔离
答案3
您可以将脚本存储在/usr/bin
或/usr/local/bin
(首选)或/opt
您必须参考 ExecStart=
单元文件的 key In service 部分中的脚本