自动下载 - AWS 截止日期云

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

自动下载

Deadline CLI 提供了一个命令,用于下载队列中自上次运行相同命令以来已完成的所有任务的输出。您可以将其配置为 cron 作业或计划任务以重复运行。这样可以连续自动下载输出。

在设置自动下载之前,请按照作业附件的存储配置文件中的步骤配置要上传和下载的资产数据的所有路径。如果作业使用的输出路径不在其存储配置文件中,则自动下载会跳过下载该输出,并打印警告消息以汇总未下载的文件。同样,如果提交作业时没有存储配置文件,则自动下载会跳过该作业并打印警告消息。默认情况下,Deadline Cloud 提交者会显示存储配置文件之外的路径的警告消息,以帮助确保配置正确。

配置 AWS 凭证

如果要手动运行输出同步命令,或者要在将其配置为 cron 作业之前了解其工作原理,则可以使用登录 Deadline Cloud monitor 桌面应用程序的凭据。

本地 AWS 凭证

您的本地工作人员使用凭据来访问 Deadline Cloud 作业附件输出。为了获得最安全的访问权限,我们建议使用 IAM Anywhere 角色对工作人员进行身份验证。有关更多信息,请参阅任何地方的 IAM 角色

为了进行测试,您可以使用 IAM 用户访问密钥作为 AWS 证书。我们建议您通过包含限制性内联策略来为 IAM 用户设置过期时间。

重要

请注意以下警告:

  • 请勿使用您账户的根凭证访问 AWS 资源。这些凭证可提供不受限的账户访问且难以撤销。

  • 请勿在应用程序文件中按字面输入访问密钥或凭证信息。如果您这样做,则在将项目上传到公共存储库或在其他情况下,会有意外暴露凭证的风险。

  • 不得在项目区域中放入包含凭证的文件。

  • 保护您的访问密钥。请不要向未经授权方提供访问密钥,即便是为了帮助找到您的账户标识符也不行。如果您这样做,可能会向某人提供对您的账户的永久访问权限。

  • 请注意,存储在共享凭据文件中的所有 AWS 凭据都以纯文本形式存储。

有关更多详细信息,请参阅AWS 一般参考》中的管理 AWS 访问密钥的最佳实践。

创建 IAM 用户
  1. 使用 https://console.aws.amazon.com/iam/ 打开 IAM 控制台。

  2. 在导航窗格中,选择用户,然后选择创建用户

  3. 为用户命名deadline-output-downloader。清除 “为用户提供访问权限” 复选框 AWS Management Console,然后选择 “下一步”。

  4. 直接选择附加策略

  5. 选择 C re ate policy 以创建具有最低所需权限的自定义策略。

  6. 在 JSON 编辑器中,指定以下权限:

    { "Version": "2012-10-17", "Statement": [ { "Sid": "DeadlineCloudOutputDownload", "Effect": "Allow", "Action": [ "deadline:AssumeQueueRoleForUser", "deadline:ListQueueEnvironments", "deadline:ListSessions", "deadline:ListSessionActions", "deadline:SearchJobs", "deadline:GetJob", "deadline:GetQueue", "deadline:GetStorageProfileForQueue" ], "Resource": "*" } ] }
  7. 命名策略DeadlineCloudOutputDownloadPolicy并选择创建策略

  8. 返回用户创建页面,刷新策略列表,选择DeadlineCloudOutputDownloadPolicy您刚刚创建的策略,然后选择下一步

  9. 查看用户详细信息,然后选择创建用户

将用户访问权限限制在有限的时间段内

您创建的任何 IAM 用户访问密钥都属于长期凭证。为了确保这些凭证在处理不当的情况下会过期,您可以创建内联策略来指定密钥失效的日期,从而限制这些凭证的使用时间。

  1. 打开刚创建的 IAM 用户。在 “权限” 选项卡中,选择 “添加权限”,然后选择 “创建内联策略”。

  2. 在 JSON 编辑器中,指定以下权限。要使用此策略,请将示例策略中的aws:CurrentTime时间戳值替换为您自己的时间和日期。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": "*", "Resource": "*", "Condition": { "DateGreaterThan": { "aws:CurrentTime": "2024-01-01T00:00:00Z" } } } ] }
创建访问密钥
  1. 在用户详细信息页面上,选择安全凭证选项卡。在访问密钥部分,选择创建访问密钥

  2. 指明您要将密钥用于 “其他”,然后选择 “下一步”,然后选择 “创建访问密钥”。

  3. 在 “检索访问密钥” 页面上,选择 “显示” 以显示用户的私有访问密钥的值。您可以复制凭证或下载 .csv 文件。

存储用户访问密钥
  1. 将用户访问密钥存储在系统的 AWS 凭据文件中:

    • 开启Linux,文件位于 ~/.aws/credentials

    • 开启Windows,文件位于 %USERPROFILE\.aws\credentials

    替换以下密钥:

    [deadline-downloader] aws_access_key_id=ACCESS_KEY_ID aws_secret_access_key=SECRET_ACCESS_KEY region=YOUR_AWS_REGION
  2. 要始终使用这些凭据,请将 env 变量设置为AWS_PROFILEdeadline-downloader

重要

当您不再需要此 IAM 用户时,我们建议您将其删除,以符合AWS 安全最佳实践。我们建议您要求人类用户在访问AWS IAM Identity Center时使用临时证书 AWS。

先决条件

在创建用于自动下载的 cron 任务或计划任务之前,请完成以下步骤。

  1. 如果你还没有,请安装 Python

  2. 通过运行以下命令安装 Deadline CLI:

    python -m pip install deadline
  3. 使用以下命令确认 Deadline CLI 的版本是否为 0.52.1 或更高版本。

    $ deadline --version deadline, version 0.52.1

测试输出下载命令

验证该命令在您的环境中是否有效
  1. 获取通往截止日期的路径

    Linux and macOS
    $ which deadline
    Windows
    C:\> where deadline
    PowerShell
    PS C:\> Get-Command deadline
  2. 运行 sync-output 命令进行引导。

    /path/to/deadline queue sync-output \ --farm-id YOUR_FARM_ID \ --queue-id YOUR_QUEUE_ID \ --storage-profile-id YOUR_PROFILE_ID \ --checkpoint-dir /path/to/checkpoint/directory \
  3. 只有当您的下载计算机与提交计算机相同时,才需要执行此步骤。将--storage-profile-id YOUR_PROFILE_ID \上面的内容替换为--ignore-storage-profiles

  4. 提交测试作业。

    1. 从 GitHub下载.zip 文件。

      1. 打开deadline-cloud-samples GitHub 存储库

      2. 选择 “代码”,然后从下拉菜单中选择 “下载 ZIP”。

      3. 将下载的档案解压缩到本地目录。

    2. 运行

      cd /path/to/unzipped/deadline-cloud-samples-mainline/job_bundles/job_attachments_devguide_output
    3. 运行

      deadline bundle submit .
      1. 如果您没有默认的 deadline 配置设置,则可能需要在命令行中提供以下内容。

        --farm-id YOUR-FARM-ID --queue-id YOUR-QUEUE-ID
    4. 等待任务完成后再进入下一步。

  5. 再次运行同步输出命令。

    /path/to/deadline queue sync-output \ --farm-id YOUR_FARM_ID \ --queue-id YOUR_QUEUE_ID \ --storage-profile-id YOUR_PROFILE_ID \ --checkpoint-dir /path/to/checkpoint/directory
  6. 请验证以下内容:

    • 您的测试作业的输出显示在目标目录中。

    • 将在您指定的检查点目录中创建检查点文件。

设置预定下载

选择操作系统的选项卡,了解如何配置每 5 分钟自动下载一次。

Linux
  1. 验证 CLI 安装截止日期

    获取截止日期可执行文件的确切路径:

    $ which deadline

    请注意此路径(例如/opt/homebrew/bin/deadline),以便在 plist 文件中使用。

  2. 创建检查点目录

    创建存储检查点文件的目录。确保您的用户拥有适当的权限才能运行该命令。

    $ mkdir -p /path/to/checkpoint/directory
  3. 创建日志目录

    为 cron 作业日志创建目录:

    $ mkdir -p /path/to/logs

    考虑使用 https://www.redhat.com/en/ blog/setting-logrotate 在日志文件上设置日志轮换

  4. 检查当前的 Crontab

    查看您当前的 crontab 以查看现有作业:

    $ crontab -l
  5. 编辑 Crontab

    打开你的 crontab 文件进行编辑:

    $ crontab -e

    如果这是您第一次,系统可能会提示您选择编辑器(nano、vim 等)。

  6. 添加 Cron Job 条目

    添加以下行以每 5 分钟运行一次作业(将路径替换为步骤 1 和 2 中的实际值):

    */5 * * * * AWS_PROFILE=deadline-downloader /path/to/deadline queue sync-output --farm-id YOUR_FARM_ID --queue-id YOUR_QUEUE_ID --storage-profile-id YOUR_PROFILE_ID --checkpoint-dir /path/to/checkpoint/directory >> /path/to/logs/deadline_sync.log 2>&1
  7. 验证 Cron Job 的安装情况

    保存并退出编辑器后,验证是否添加了 cron 作业:

    $ crontab -l

    您应该会看到您的新工作已列出。

  8. 检查 Cron 服务状态

    确保 cron 服务正在运行:

    # For systemd systems (most modern Linux distributions) $ sudo systemctl status cron # or $ sudo systemctl status crond # For older systems $ sudo service cron status

    如果未运行,请启动它:

    $ sudo systemctl start cron $ sudo systemctl enable cron # Enable auto-start on boot
macOS
  1. 验证 CLI 安装截止日期

    获取截止日期可执行文件的确切路径:

    $ which deadline

    请注意此路径(例如/opt/homebrew/bin/deadline),以便在 plist 文件中使用。

  2. 创建检查点目录和日志目录

    创建存储检查点文件的目录:

    $ mkdir -p /path/to/checkpoint/directory $ mkdir -p /path/to/logs

    考虑使用 https://formulae.brew 在日志文件上设置日志轮换。 sh/formula/logrotate

  3. 创建一个 Plist文件

    在创建包含以下内容~/Library/LaunchAgents/com.user.deadlinesync.plist的配置文件(/path/to/deadline替换为步骤 1 中的实际路径):

    <?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.user.deadlinesync</string> <key>ProgramArguments</key> <array> <string>/path/to/deadline</string> <string>queue</string> <string>sync-output</string> <string>--farm-id</string> <string>YOUR_FARM_ID</string> <string>--queue-id</string> <string>YOUR_QUEUE_ID</string> <string>--storage-profile-id</string> <string>YOUR STORAGE PROFILE ID</string> <string>--checkpoint-dir</string> <string>/path/to/checkpoint/dir</string> </array> <key>EnvironmentVariables</key> <dict> <key>AWS_PROFILE</key> <string>deadline-downloader</string> </dict> <key>RunAtLoad</key> <true/> <key>UserName</key> <string>YOUR_USER_NAME</string> <key>StandardOutPath</key> <string>/path/to/logs/deadline_sync.log</string> <key>StartInterval</key> <integer>300</integer> </dict> </plist>

    --ignore-storage-profiles如果您的下载计算机与提交计算机相同,请将--storage-profile-id YOUR_PROFILE_ID上面的内容替换为

  4. 验证列表文件

    验证 plist 文件的 XML 语法:

    $ plutil -lint ~/Library/LaunchAgents/com.user.deadlinesync.plist

    如果文件有效,则应返回 “OK”。

  5. 检查现有的启动代理或启动守护程序

    检查启动代理是否已加载:

    $ launchctl list | grep deadlinesync OR $ sudo launchctl list | grep deadlinesync

    如果存在,请先将其卸载:

    $ launchctl bootout gui/$(id -u)/com.user.deadlinesync OR $ sudo launchctl bootout system/com.user.deadlinesync
  6. 创建并引导

    要在用户登录时运行此任务,请以身份运行LaunchAgent。要在每次计算机运行时都没有用户登录的情况下运行此任务,请将其作为运行LaunchDaemon

    1. 要以LaunchAgent以下方式运行:

      1. 使用在下创建的配置 ~/Library/LaunchAgents/com.user.deadlinesync.plist

      2. 然后使用 bootstrap 命令加载配置:

        $ launchctl bootstrap gui/$(id -u) ~/Library/LaunchAgents/com.user.deadlinesync.plist
    2. 要以LaunchDaemon以下方式运行:

      1. 通过运行以下命令移动 Pilst 文件并更改权限:

        $ sudo mv ~/Library/LaunchAgents/com.user.deadlinesync.plist /Library/LaunchDaemons/ $ sudo chown root:wheel /Library/LaunchDaemons/com.user.deadlinesync.plist $ sudo chmod 644 /Library/LaunchDaemons/com.user.deadlinesync.plist
      2. 使用新式 bootstrap 命令加载启动代理:

        $ sudo launchctl bootstrap system /Library/LaunchDaemons/com.user.deadlinesync.plist
  7. 验证状态

    如果你引导了,请 LaunchAgent 运行以下命令来确认它已加载:

    $ launchctl list | grep deadlinesync

    如果你启动了 a LaunchDaemon,请运行以下命令确认它已加载:

    $ sudo launchctl list | grep deadlinesync

    输出应如下所示

    SOME_PID_NUMBER 0 com.user.deadlinesync

    有关详细状态信息,请执行以下操作:

    $ launchctl print gui/$(id -u)/com.user.deadlinesync

    这显示了当前状态、程序参数、环境变量、运行间隔和执行历史记录。

Windows
注意

使用这些说明创建的计划任务仅在用户登录时起作用。

要在系统启动时进行设置,无需用户登录,请参阅官方Windows文档

要执行以下所有步骤,请使用命令提示符-以管理员身份运行:

  1. 验证 CLI 安装截止日期

    查找截止日期可执行文件:

    C:\> where deadline

    记下任务中使用的完整路径(例如C:\Program Files\Amazon\DeadlineCloud\deadline.exe)。

  2. 创建检查点目录

    创建存储检查点文件的目录:

    C:\> mkdir "path\to\checkpoint\directory"
  3. 创建日志目录

    为任务日志创建目录:

    C:\> mkdir "path\to\logs"
  4. 创建 Batch 文件包装器

    创建包含以下内容的批处理文件:

    C:\> notepad C:\path\to\deadline_sync.bat
    YOUR_PATH_TO_DEADLINE.EXE queue sync-output --farm-id YOUR_FARM_ID --queue-id YOUR_QUEUE_ID --storage-profile-id YOUR_PROFILE_ID --checkpoint-dir path\to\checkpoint\checkpoints > path\to\logs\deadline.log 2>&1
  5. Test Batch 文件

    手动测试批处理文件:

    C:\> .\path\to\deadline_sync.bat

    检查日志文件是否已创建:

    C:\> notepad path\to\logs\deadline_sync.log
  6. 查看任务计划程序服务

    确保任务计划程序服务正在运行:

    C:\> sc query "Schedule"

    如果该服务不存在,请尝试其他名称:

    C:\> sc query "TaskScheduler" C:\> sc query "Task Scheduler"

    如果未运行,请启动它:

    C:\> sc start "Schedule"
  7. 创建计划任务

    创建每 5 分钟运行一次的任务。

    C:\> schtasks /create /tn "DeadlineOutputSync" /tr "C:\path\to\deadline_sync.bat" /sc minute /mo 5

    命令细分:

    • /tn-任务名称

    • /tr-要运行的任务(您的批处理文件)

    • /sc minute /mo 5-时间表:每 5 分钟一班

  8. 验证任务创建

    检查任务是否已成功创建:

    schtasks /query /tn "DeadlineOutputSync" /v /fo LIST

    寻找:

    • 待@@ 运行的任务:应显示您的批处理文件路径

    • 下次运行时间:应显示 5 分钟以内的时间

  9. 测试任务执行

    手动运行任务进行测试:

    schtasks /run /tn "DeadlineOutputSync"

    检查任务状态:

    schtasks /query /tn "DeadlineOutputSync"
验证设置

要验证自动下载设置是否成功,请完成以下步骤。

  1. 提交新的测试作业。

  2. 等待一个调度程序间隔完成,在本例中为 5 分钟。

  3. 验证是否自动下载了新输出。

如果输出未下载,请查看 “故障排除” 部分以获取过程日志。

自动下载疑难解答

如果您在自动下载时遇到问题,请检查以下内容:

存储配置文件问题

目录权限

  • 确保调度程序服务用户具有:

    • 对检查点目录的读/写权限

    • 对输出目标目录的写入权限

  • 对于Linux和macOS,使用ls -la来检查权限。

  • 对于Windows,请查看 “属性” 文件夹中的 “安全设置”。

检查日程安排日志

Linux
  1. 检查 cron 服务是否正在运行:

    # For systemd systems $ sudo systemctl status cron # or $ sudo systemctl status crond # Check if your user has cron job correctly configured $ crontab -l
  2. 查看 cron 执行日志:

    # Check system logs for cron activity (most common locations) $ sudo tail -f /var/log/syslog | grep CRON $ sudo tail -f /var/log/cron.log | grep deadline # View recent cron logs $ sudo journalctl -u cron -f $ sudo journalctl -u crond -f # On some systems
  3. 查看您的特定 cron 作业日志:

    # View the log file specified in your cron job $ tail -100f /path/to/logs/deadline_sync.log
  4. 在系统日志中搜索 cron 作业执行情况:

    # Look for your specific cron job executions $ sudo grep "deadline.*incremental-output-download" /var/log/syslog # Check for cron job starts and completions $ sudo grep "$(whoami).*CMD.*deadline" /var/log/syslog
  5. 检查检查点文件更新:

    # List checkpoint files with timestamps $ ls -la /path/to/checkpoint/directory/ # Check when checkpoint was last modified $ stat /path/to/checkpoint/directory/queue-*_download_checkpoint.json
  6. 检查日志文件:

    $ ls -la /path/to/log/deadline_sync.log
macOS

查看启动代理执行日志:

  1. 检查启动代理是否正在运行:

    $ sudo launchctl list | grep deadlinesync

    输出显示:PID Status Label(PID 将在当前未运行-时显示,这对于间隔作业来说是正常的)

  2. 查看详细的启动代理状态:

    $ sudo launchctl print system/com.user.deadlinesync

    这显示了执行历史记录、上次退出代码、运行次数和当前状态。

  3. 查看启动代理执行日志:

    # View recent logs (last hour) log show --predicate 'subsystem contains "com.user.deadlinesync"' --last 1h # View logs from a specific time period log show --predicate 'subsystem contains "com.user.deadlinesync"' --start '2024-08-27 09:00:00'
  4. 强制运行启动代理以立即进行测试:

    $ sudo launchctl kickstart gui/$(id -u)/com.user.deadlinesync

    无论日程安排如何,这都会立即触发作业,这对于测试很有用。

  5. 检查检查点文件更新:

    # List checkpoint files with timestamps $ ls -la /path/to/checkpoint/directory/
  6. 检查日志文件:

    $ ls -la /path/to/log/deadline_sync.log
Windows
  1. 检查任务计划程序服务是否正在运行:

    C:\> sc query "Schedule"

    如果该服务不存在,请尝试其他名称:

    C:\> sc query "TaskScheduler" C:\> sc query "Task Scheduler"
  2. 查看您的计划任务:

    C:> schtasks /query /tn "DeadlineOutputSync"
  3. 检查任务的日志文件:

    # View the log file created by your batch script C:> notepad C:\path\to\logs\deadline_sync.log
  4. 检查检查点文件更新:

    # List checkpoint files with timestamps C:> dir "C:\path\to\checkpoint\directory" /od