有没有办法在 systemd 服务单元文件中动态分配环境变量?
我们有一台有 4 个 GPU 的机器,我们想为每个 GPU 启动某个服务的多个实例。例如:
因此,1:1、2:1 等实际上是服务单元文件中的 %i。
为了将服务绑定到特定的 GPU,服务可执行文件会检查某个环境变量,例如:
USE_GPU=4
Run Code Online (Sandbox Code Playgroud)
有没有办法在服务单元文件中获取 %i 并通过一些(shell)函数运行它来导出 GPU 编号,然后我可以相应地设置 USE_GPU 环境变量?
最重要的是,我不想要编写多个/etc/systemd/system/gpu_service@x:y.service/local.conf文件的麻烦,这样我就可以启动更多的实例。
我不得不使用一堆运行 SuSE 8 的销售点系统。它们是我客户的计算机。我们一直在处理这些旧系统,直到他们将整个车队升级到 SLE 11。
问题:系统现在有两个设备竞争 ttyUSB* 字符设备节点。它们具有不同的供应商 ID 和产品 ID。SuSE 8 没有 udev,而是有 devfs。
知道设备的供应商 ID 和产品 ID,以及负责设备的内核模块(它是 ipaq 内核模块),我如何找出它已分配给哪个字符设备节点,以一种可以将其存储在POSIX shell 脚本中的字符串(例如 $DeviceNode)?
现在,我在我的 shell 脚本中以一种非常愚蠢的方式来做:
DeviceNode=$(dmesg | tac | grep "PocketPC PDA converter now attached to" | set -n 's/.*now attached to \([[:alnum:]]\{1,\}\).*/\1/p')
Run Code Online (Sandbox Code Playgroud)
所以我得到,例如
> echo $DeviceNode
ttyUSB1
>
Run Code Online (Sandbox Code Playgroud)
当然,问题之一是设备可能已经被拔掉了,我无法用这种幼稚的方法来判断。
有没有更好的办法?
编辑:所以我今天早上发现了这篇文章。我可以假设,在 /proc/tty/driver/usbserial 中,从第 2 行开始,每行的第一个数字是 ttyUSBx 之一的次要编号吗?
编辑 2:另一种(也许更好)的解决方案是获得持久的节点关联(例如,始终将具有已知供应商 ID 和已知产品 ID 的设备与 ttyUSB1 关联)。这可以在 devfs 中实现吗?
我需要擦洗几个非常大的硬盘。但是,我无法从桌面执行此操作。我需要在移动中使用笔记本电脑进行操作。scrub(1)在 HDD 上一次通过需要一天多的时间,但我不可能让我的笔记本电脑静止那么久。
scrub(1) 本身不支持任何类型的偏移命令行参数。
有没有办法做scrub(1)(写入随机字节),但可以恢复的方式?基本上该命令需要在我中断它时打印出偏移量,并且它需要接受一个偏移量参数来恢复。