【问题标题】:How can I run my applescript at intervals我怎样才能每隔一段时间运行我的applescript
【发布时间】:2016-06-01 12:00:33
【问题描述】:

我制作了一个脚本,它每天获取当地时间,然后通过桌面上的代码为我指定的文件夹制作别名。一开始,它会询问现在是哪一天(通过列表)。它不起作用,因为即使我使用 launchd 每 5 分钟运行一次,它也会要求我提供列表。有没有办法每天存储变量,然后让它全天完成其余的工作?

我实际上已经结合了 AppleScript 和 Automator 来使其运行,所以我需要让 Automator 运行而不是 AppleScript。

我的 PLIST 代码

  <?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>RunAtLoad</key>  
        <true/>
        <key>KeepAlive</key>
        <true/>
        <key>Label</key>
        <string>wallpaper.restart</string>
        <key>ProgramArguments</key>
        <array>
                <string>PATH:TO:FILE</string> 
        </array>
        <key>StartCalendarInterval</key>
        <dict>
            <key>Hour</key>
            <integer>1</integer>

       </dict>
</dict>
</plist>

我将不胜感激任何对我开始的指示,或任何可以提供帮助的东西。

谢谢

【问题讨论】:

  • 正如您在相关问题中已经提到的,此代码在每天下午 1 点运行脚本(并且总是在计算机由于RunAtLoad 键启动时)但不是基于间隔的。要在 AppleScript/Automator 端保存状态,可以在属性中使用用户默认值或load/store script 模式。 keepAlive 是干什么用的?
  • @vadian 很抱歉回复晚了-感谢您的快速回复;)是的,您是对的,我错误地复制了错误的代码。在我的新代码中,我有新的更新。
  • 再一次:你知道keepAlive实际上做了什么吗?
  • @vadian - 这意味着在用户使用计算机/登录时保持脚本活动/运行。对吗?
  • keepAlive 仅影响具有运行循环的 UNIX 进程。脚本不是进程,所以keepAlive 完全没有效果。

标签: macos applescript plist automator launchd


【解决方案1】:

要在某个时间间隔运行脚本,您可以使用看起来像这样的 .plist...

<?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.mycompany.myScript</string>
    <key>Program</key>
    <string>/Applications/myScript/myScript.app/Contents/MacOS/applet</string>
    <key>LowPriorityIO</key>
    <true/>
    <key>Nice</key>
    <integer>1</integer>
  <key>StartInterval</key>
  <integer>600</integer>
</dict>
</plist>

将 600 更改为您希望它运行的任何秒数,例如每 5 分钟 300 秒。

要将数据写入 .plist 文件以便您可以随时访问它,您可以使用类似这样的东西...

do shell script "defaults write com.mycompany.myApp MyInfo '" & theInfo & "'"

然后阅读您将使用这样的代码的信息...

set myPref to do shell script "defaults read com.mycompany.myApp MyInfo"

最后,我不确定您是否需要“列表”,您可以使用类似于此的脚本获取日期...

do shell script "date \"+%Y-%m-%d\""

我在此示例中选择的格式是 2016-06-01,但是您可以通过更改 date 命令后的字符串来将格式信息更改为您想要的任何内容。有关详细信息,请参阅手册页或查看here

【讨论】:

  • 感谢您的回答,我的规范是从第 1 天、第 2 天等到第 6 天。另外,我不确定您提供的脚本是否会最多存储一个变量一天?我们可以尝试将它作为服务器运行(还是什么都不做?)
  • @Dev set myPref to do shell script "defaults read com.mycompany.myApp MyInfo" 行会将数据写入 .plist 文件,只要文件存在(文件写入您的偏好文件夹),该文件就会存在。我不确定您的“第 1 天”和“第 2 天”指的是什么,但您可以按照我的建议使用“日期”命令来获取星期几、一年中的星期几或许多其他选项。根据您的用例,它可能仍然值得研究。
  • 再次感谢您的帮助。再次澄清一下,第 1 天第 2 天第 3 天基本上是我设置的名称。它一直持续到第 6 天。我不能使用“日期”的原因是因为它不是系统能够识别的东西,而是我编造的东西。请不要将第 1 天第 2 天和星期一星期二混淆,因为它们是完全不同的东西。这几乎就像在野外取名——“香蕉、苹果、橙子”。这些是有组织的单词,但不是 applescript 会知道的内容,而不是“2016 年 6 月 2 日或下午 12:33:04 等”。
  • @Dev 有道理。我只是想知道您是否能够使用日期和“随机词”来知道何时从“第 1 天”更改为“第 2 天”之类的事情。
  • 原理是,如果明天(6 月 6 日)是第 1 天,那么周五会变成第 5 天,下周一会变成第 6 天。所以它是从周一到周五的重复循环.我认为很难与日期集成,但也许我们可以尝试一下。 @ThrowBackDewd
猜你喜欢
  • 2022-01-16
  • 1970-01-01
  • 2020-06-20
  • 2021-01-18
  • 1970-01-01
  • 2022-08-20
  • 1970-01-01
  • 2021-05-27
  • 1970-01-01
相关资源
最近更新 更多