在 systemd 服务文件中,可以设置以下与调度相关的选项(来自systemd.exec
手册页,如果我错了,请纠正我):
Nice 为执行的进程设置默认的 nice 级别(调度优先级)。取一个介于 -20(最高优先级)和 19(最低优先级)之间的整数。有关详细信息,请参阅setpriority(2)。
这是熟悉的nice级别。由于最近的 linux 内核的“自动分组”功能,它的效果似乎在某种程度上被“颠覆”了。所以下面的选项可能是我真正想要设置的,以保持进程在我的桌面体验中表现良好。
CPUSchedulingPolicy 为执行的进程设置 CPU 调度策略。采用其他、批处理、空闲、fifo 或 rr 之一。有关详细信息,请参阅sched_setscheduler(2)。
CPUSchedulingPriority 设置已执行进程的 CPU 调度优先级。可用的优先级范围取决于所选的 CPU 调度策略(见上文)。对于实时调度策略,可以使用 1(最低优先级)和 99(最高优先级)之间的整数。有关详细信息,请参阅sched_setscheduler(2)。
CPUSchedulingResetOnFork 采用布尔参数。如果为 true,当执行的进程分叉时,提升的 CPU 调度优先级和策略将被重置,因此不会泄漏到子进程中。有关详细信息,请参阅sched_setscheduler(2)。默认为假。
我理解最后一个选项。我从前两个的解释中了解到,我可以选择一个调度策略,然后根据该策略,选择一个优先级。我并不完全清楚我应该为哪种任务选择什么。例如,为备份任务选择“空闲”是否安全(相对 CPU 密集型,因为重复数据删除),还是另一种更适合?
总的来说,我正在寻找对每项政策、每项优先事项和针对特定目的的适用性的易于理解的概述。与nice级别的交互也很有趣。
除了 CPU 调度,还有 IO 调度。我想这对应于ionice
(如果我错了,请纠正我)。
IOSchedulingClass 为执行的进程设置 I/O 调度类。采用 0 到 3 之间的整数或字符串 none、realtime、best-effort 或 idle 之一。有关详细信息,请参阅ioprio_set(2)。
IOSchedulingPriority 设置已执行进程的 I/O 调度优先级。取一个介于 0(最高优先级)和 7(最低优先级)之间的整数。可用的优先级取决于所选的 I/O 调度类(见上文)。有关详细信息,请参阅ioprio_set(2)。
我们在这里看到与 CPU …
我有一个sed
在 Linux 上使用的 GNU脚本;它安装在/bin/sed
,似乎包含 GNUisms。我有使用 Mac OS X 的合作者。他们已经安装了(非 GNU)sed
,位于/usr/bin/sed
,并且使用 Homebrew(http://mxcl.github.io/homebrew/)可以sed
像gsed
使用位于的coreutils包一样安装 GNU /usr/local/bin/gsed
。
目前,脚本以#!/bin/sed -f
. 当 GNUsed
安装为时,如何修改它以便它可以在 Mac OS X 上运行gsed
?
另一种选择是删除 GNUisms,但这可能有点困难,因为我手头没有 Mac OS X 安装并且不能要求我的合作者测试中间版本。
我正在考虑购买不提供 linux 驱动程序,但提供 Mac OS X 驱动程序的打印机(实际上我更喜欢它提供的功能的一体机,但我想在这里关注打印机部分)。我知道两个操作系统(都可以)使用 CUPS 进行打印。这是否意味着我可以从 Mac OS X 驱动程序包中复制 ppd(驱动程序)文件并在 linux 下使用(修改)?
查看文件时,有 Mac OS X 打印对话框特定的行,例如
*APPrinterIconPath: "/Library/Printers/<path to icons file>.icns"
*APDialogExtension: "/Library/Printers/<path to Mac OS X plugin file>.plugin"
*APAutoSetupTool: "/Library/Printers/<path to autoconfig utility>"
Run Code Online (Sandbox Code Playgroud)
我想我可以安全地删除。还有一些带有 OS X 特定路径的行,例如
*cupsFilter: "application/vnd.cups-raster 0 /Library/Printers/<path to filter file>"
*OKDitherLibrary: "/Library/Printers/<path to dither library>.dylib"
Run Code Online (Sandbox Code Playgroud)
我不知道该怎么办。与最后一行一样,还有很多其他行的关键字以“OK”开头,我认为它们是特定于供应商的,例如
*OKPaperCheckManualFeed_CheckOFF: True
*OKSupportCUPaperSizeCheck: True
*OKSupportCustomManualFeed_CheckOFF: True
*OKSupportPCLMediaTypeUSERTYPE: Yes
*OKSupportMarginCentering: True
Run Code Online (Sandbox Code Playgroud)
我也不知道该怎么办。
(作为后备,鉴于打印机支持 PCL6,我可以为此使用通用驱动程序,但随后就错过了可能有趣的功能。)
我想创建一个服务文件,该文件在启动时会导致在执行服务文件的操作之前安装指定的文件系统(因为它需要该文件系统可用)。此外,我希望此服务文件在无法安装文件系统的情况下正常失败(例如,因为它位于有时未插入的外部硬盘驱动器上)。
我的第一次尝试很简单并且部分成功:x-systemd.automount
作为选项添加到文件系统的 fstab 行中。然后,当服务文件导致其挂载点被访问时,文件系统将自动挂载。但是,它不会正常失败,因为超时很长并且会被记录为错误。
我的第二次尝试并不成功,我将BindsTo=path-to-mountpoint.mount
和添加After=path-to-mountpoint.mount
到服务文件(x-systemd.automount
已删除):path-to-mountpoint.mount
找不到。我想它只是在成功安装后创建的,所以它并不适合我想做的事情。
linux ×2
systemd ×2
automounting ×1
cups ×1
dependencies ×1
drivers ×1
ionice ×1
nice ×1
osx ×1
portability ×1
printing ×1
scheduling ×1
scripting ×1
sed ×1
shebang ×1