我在哪里放置由 systemd 单元执行的脚本?

Jon*_*mar 11 arch-linux directory-structure systemd

适用于任何使用 systemd 管理进程并遵循Linux 基金会文件系统层次结构标准的操作系统

我最近问到除了 systemd 单元文件之外的其他地方: 我应该将我的 systemd 单元文件放在 Arch Linux 的什么位置?

我想每 5 分钟运行一次python 脚本(不要与调用 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
Run Code Online (Sandbox Code Playgroud)

/etc/systemd/system/writehello.timer

这是一个相应的计时器。这都是有据可查的。

[Unit]
Description=test

[Timer]
Persistent=true
OnUnitActiveSec=10s
OnBootSec=10s

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

/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
Run Code Online (Sandbox Code Playgroud)

ako*_*nov 10

我也在考虑同样的问题,想看看其他人的意见。我上采取的是/usr/local/sbin因为sbin是你把应该由管理员运行的东西。

您的分析是正确的,/usr/local是专用于安装不受包管理器管理的东西的位置。但bin适用于普通用户应该可以运行的东西。在任何一种情况下,您都不应允许对任何人进行写访问,但root/usr/local. 这就是我记得的约定(对于整个 /usr/)。

/opt通常用于系统默认不使用的包,用户应设置一些环境变量以通过 bin/man/etc 访问。特定包的目录。阅读我上面提供的链接。

请参阅RHEL FSH 概述以及最新的 FHS 文档


Jon*_*mar 7

以下是存储将要运行的内容的理想位置(有关详细信息,请参阅链接):

引用自文件系统层次结构标准 HS v2.3

本地安装的系统管理程序应放置在 /usr/local/sbin 中。

据我所知,当 FHS 文档提到“系统”时,它指的是某个“root”用户。

  1. /usr/local/bin或者对于该计算机来说/usr/local/sbin 是唯一的(不适用于包管理器,例如脚本、CD 中的软件),即不是从公共源安装到所有计算机(不是包管理器)。/usr/local/bin所有用户都可以运行东西。/usr/local/sbinstuff只能由root运行(它是系统“二进制”目录)。

  2. /usr/bin 不是唯一的(计算机之间共享的内容,例如来自包管理器,即包管理器使用此位置

  3. /root/binroot用户可以创建此目录而不是使用/usr/local/sbin. 这是一个存储只有root 用户运行或可以看到的内容的好地方(该文件夹只能由 root 或 root 组执行,因此除 root 之外的任何人都看不到其内容)您甚至可以在其中创建一个 bin 文件夹保持事情一致,但无论如何没人会知道:)

  4. /home/<user>/bin 标准用户可以创建此目录。它是存储由 systemd 作为标准用户运行的脚本的好地方。

结论是,1 号位置是存储由 systemd 守护进程/服务运行的脚本的理想位置。

这说得通,

  1. 这是一个标准位置
  2. 它与您的包管理器包隔离