4

从旧 Mac 迁移到新 Mac。

试图迁移我在旧 Mac 上的用户 crontab。

现在我知道我可能可以通过创建 /etc/crontab 来运行 cron - 但鉴于苹果已弃用它而支持 launchd - 我想我会尝试将我的 crontab 迁移到 launchd plist 文件。学习新东西总是很有趣:)

crontab 并不难——我倾向于设置 shell 脚本来完成这项工作,然后在预定的时间调用它们。

我可以同时从 plist 中调用这些罚款 - 没问题。

但是 - 在我的 crontab 顶部,我有 MAILTO=my-gmail-email-address - 所以不是将邮件发送给盒子的邮件假脱机上的本地用户,而是将它们发送给我的 gmail。

我看不到您可以为launchd plist 文件配置它。

所以 - 在我修改所有脚本以将所有输出重定向到 tmp 文件然后邮寄 tmp 文件之前(必须在相当多的脚本中执行此操作) - 有没有办法在启动级别执行此操作?

4

2 回答 2

3

恐怕launchd(8) 不支持开箱即用的stdout/stderr 邮寄。这是一个解决方法:

StandardOutPath通过和将输出重定向StandardErrorPath到专用目录中的文件。然后设置一个发送该目录中每个文件的作业。使用键触发此作业QueueDirectories。确保此脚本在邮寄文件后将其删除。

于 2013-05-20T05:14:52.733 回答
2

一种转换为launchd的方法是懒惰的方式(我是怎么做的)

您从应用商店支付 0.99 美元购买 Lingon;那么您只需填写几个字段,它就会启动...

否则:launchd 看起来像这样

<?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>name of launchd</string>
    <key>ProgramArguments</key>
    <array>
        <string>[terminal command to execute]</string>
    </array>
    <key>RunAtLoad</key>
    <[(true)/(false)]/>
    <key>StartCalendarInterval</key>
    <dict>
        [any of these options are removable]
        [for everyday remove the Day and Weekday tags]
        <key>Day</key>
    <integer>[day of the month]</integer>
    <key>Weekday</key>
    <integer>[day of the week 0-7 - (sunday=0);]</integer>
        <key>Hour</key>
        <integer>[hour of day (military time)]</integer>
        <key>Minute</key>
        <integer>[minute]</integer>
    </dict>
</dict>
</plist>

任何 [] 要么是注释(必须删除)要么是选项列表

使用 launchctl 命令将用于挂载 launchd

于 2013-05-19T02:33:05.977 回答