我想让我的电脑在每晚 11:45 将音量设置为特定级别。我运行的是 OSX 10.11.4。我可以通过终端手动设置音量
osascript -e "set Volume 1.7"
或作为脚本
set volume 1.7
不过我希望安排在每晚。很难在网上找到任何不是超级过时的东西。我真的不想使用 iCal。根据我在网上找到的信息,
launchd
是可行的方法,但作为一个菜鸟,我不知道从哪里开始。
我在 /Library/LaunchAgents 中看到了有关使用 .plist 的信息。所以我找到了一个漂亮的 plist 生成器Launched.zerowidth.com,但是我应该在 plist 中放入什么样的代码才能获得所需的效果呢?我还想知道如果有任何用户登录,这是否是执行此操作的正确路径。
我在这里走错路了吗?我愿意接受任何实现这一目标的想法,但我不想使用必须始终保持打开状态的第 3 方应用程序。
谢谢,
纳布
正如 @TheDarkKnight 指出的那样,cron 已被弃用,取而代之的是 launchd。
要使用 launchd,请将以下内容保存为
com.example.volume.plist
中的 ~/Library/LaunchAgents/
:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.example.volume</string>
<key>ProgramArguments</key>
<array>
<string>sh</string>
<string>-c</string>
<string>set volume 1.7</string>
</array>
<key>StartCalendarInterval</key>
<dict>
<key>Hour</key>
<integer>23</integer>
<key>Minute</key>
<integer>45</integer>
</dict>
</dict>
</plist>
然后运行
launchctl load ~/Library/LaunchAgents/com.example.volume
开始。您可以通过 launchctl start com.example.volume
强制任务立即运行。
如果您希望以 root 身份运行它,请保存到
/Library/LaunchDaemons/
。
请考虑使用 cron 守护进程。默认情况下它存在于 osx 中。
创建音量调节脚本
#!/bin/bash -l
/usr/bin/osascript -e "set Volume 1.7"
然后向 crontab 添加新行。
crontab -e
默认情况下,它将在 vi(m) 编辑器中打开。但您可以使用
调整默认编辑器export EDITOR=/path/to/your/awesome/editor
然后将新字符串添加到 crontab
0 20 * * * /path/to/volume/script.sh
给定的命令将在每天晚上 8 点运行。
请在此处找到更多 crontab 示例:https://en.wikipedia.org/wiki/Cron
对于简单的单衬,请使用
cron
:
# edit your user crontab
crontab -e
# run daily at 20:00 (8:00pm)
0 20 * * * osascript -e "set Volume 1.7"
对于较长的脚本,您可以将其另存为 applescript(
.applescript
纯文本或 .scpt
二进制文件)。然后从cron
调用它:
# edit your user crontab
crontab -e
# run daily at 20:00 (8:00pm)
0 20 * * * osascript /path/to/setvolume.applescript
专业提示:
为了避免每次编辑 crontab 时出现
Terminal.app would like to administer your computer
提示,您可以转到 System Preferences > Security & Privacy > Privacy > Full Disk Access
并添加 /Applications/Utilities/Terminal.app
。
注:
虽然 Apple 文档 表示
launchd
优于 cron
,但迄今为止,cron
仍然得到完全支持,尽管它已被“弃用”多年。可以使用 cron
,直到它真正被删除(可能永远不会)。
顶部答案有点旧,因为
launchctl load
被标记为有利于launchctl enable
的遗留子命令。
前2步相同:将以下内容保存为
servicename.plist
中的~/Library/LaunchAgents
:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>servicename</string>
<key>ProgramArguments</key>
<array>
<string>osascript</string>
<string>-c</string>
<string>"set volume 1.7"</string>
</array>
<key>StartCalendarInterval</key>
<dict>
<key>Hour</key>
<integer>23</integer>
<key>Minute</key>
<integer>45</integer>
</dict>
</dict>
</plist>
但要启用此功能,您必须运行
launchctl enable user/502/servicename
,其中 502
是您的 用户 UID。运行以下命令来查找您的用户 UID:
echo "show State:/Users/ConsoleUser" | scutil | awk '/kCGSSessionUserIDKey :/ { print $3 }'