AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 20661
Accepted
Charlie Bear
Charlie Bear
Asked: 2009-06-06 08:58:53 +0800 CST2009-06-06 08:58:53 +0800 CST 2009-06-06 08:58:53 +0800 CST

未在 Mac 上登录时复制文件的脚本

  • 772

我们需要在我们的一个 mac 上进行粗略的备份 - 我们需要每天一次将文件从它复制到我们的 windows 文件服务器上,无论是否有人登录它。我可以找到在用户登录并安装 Windows 共享时执行此操作的脚本,但是当他们未登录时我无法找到执行此操作的方法。

那里有知道如何做到这一点的 unix / osx 极客吗?

mac-osx
  • 4 4 个回答
  • 1336 Views

4 个回答

  • Voted
  1. eternaleye
    2009-06-06T09:08:12+08:002009-06-06T09:08:12+08:00

    我强烈建议查看“cron”命令。它允许您在不同时间重复安排任意命令行任务。

    • 3
  2. Best Answer
    Chealion
    2009-06-07T09:08:26+08:002009-06-07T09:08:26+08:00

    没有人登录时运行脚本

    要运行无论您是否有用户登录都运行的守护程序,您需要查看 launchd 以管理实际执行备份的脚本。自 Mac OS X 10.4 以来,cron 已被一个名为launchd(手册页)的程序取代,该程序将 cron、init.d、rc 和其他几个实用程序全部组合到一个程序中。

    作为参考,launchd 运行启动代理(在用户登录时以用户身份运行)和启动守护程序(无论用户何时登录都运行)。这些任务由可在以下位置之一找到的 xml .plist 文件定义:

    /System/Library/LaunchDaemons(系统任务 - 不要修改),
    /Library/LaunchAgents(在任何用户登录时运行的
    /Library/LaunchDaemons计算机范围的任务),(无论谁登录都运行的计算机范围的任务),
    ~/Library/LaunchAgents(在该用户登录时运行的用户特定任务)。

    有关加载、卸载等的更多信息都可以在手册页上找到。

    我发现的最简单的方法是创建一个 shell 脚本来运行您的备份。

    然后,您可以加载它并通过将以下 .plist 文件放入/Library/LaunchDaemons并运行sudo launchctl load -w /Library/LaunchDaemons/org.example.script.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>org.example.script</string>
        <key>OnDemand</key>
        <true/>
        <key>ProgramArguments</key>
        <array>
            <string>/PATH/TO/BACKUP/script.sh</string>
        </array>
        <key>RunAtLoad</key>
        <false/>
        <!-- This runs the script every day at 2AM -->
        <key>StartCalendarInterval</key>
        <dict>
            <key>Hour</key>
            <integer>2</integer>
            <key>Minute</key>
            <integer>0</integer>
        </dict>
    </dict>
    </plist>
    

    此外,如果您想编辑或创建已启动的 plist,我建议您查找Lingon的 GUI 以编辑和创建此类 .plist 文件。

    备份脚本

    一个非常简单的备份脚本可能涉及以下元素:

    1)挂载windows文件共享:

    例如。

    mkdir /tmp/MountLocation
    mount -t smbfs //domain;user:password@server/sharepath /tmp/MountLocation
    

    2) 使用 rsync 备份文件。

    3) 完成后卸载 windows 文件共享:

    例如。

    if [`umount /tmp/MountLocation`] 
    then 
        rmdir /tmp/MountLocation
    fi
    

    更多信息mount -t smbfs可以在它的手册页或man mount上找到。

    小注意事项

    另一方面,应该注意的是,在 Tiger (10.4) 中,StartCalendarInterval 在处理睡眠时有一个相当烦人的错误,该错误已在 Leopard (10.5) 及更高版本中得到修复。

    • 3
  3. Dana the Sane
    2009-06-06T09:13:34+08:002009-06-06T09:13:34+08:00

    除了 cron 之外,如果您只想保留所有文件的当前副本,rsync 也可能会有所帮助。这是来自Ubuntu论坛的操作指南,它描述的过程与您在 OS X 中所做的非常相似。您可以跳到 rsync 部分,并且可以用 fink 或 macports 代替 aptitude 命令来获取包。

    我的说明看起来有点复杂,但是一旦你开始,它应该不会太难。

    • 1
  4. user6622
    2009-06-07T08:47:08+08:002009-06-07T08:47:08+08:00

    您需要编写一个脚本来创建挂载点,在该挂载点使用 mount_smbfs 挂载 Windows 服务器,复制文件,然后卸载服务器。如果有用户登录,你必须决定你想要什么行为——你可能不希望他们尝试两次挂载相同的共享。以下是我用于类似任务的脚本中的一些内容(顺便说一下,将每个 bash 注释转换为标题的漂亮格式,O Server Fault 团队):`

    • 首先,创建一个挂载点

    如果 [ -e /private/tmp/Volumes ] ; 然后 mkdir /private/tmp/Volumes/Terminal/ 否则 mkdir /private/tmp/Volumes/ mkdir /private/tmp/Volumes/Terminal/ fi

    • 现在,在那里安装 Sophos 计算机

    mount_smbfs //用户名:密码@192.168.1.1/InterChk /private/tmp/Volumes/Terminal

    • 如果挂载不成功,保释!

    如果 [ !-e /private/tmp/Volumes/Terminal/ESXP ] ; 然后退出fi

    • 在备份当前文件夹之前删除旧的 Sophos 文件夹

    如果 [ -e /Library/WebServer/Documents/Sophos.old ] ; 然后 rm -r /Library/WebServer/Documents/Sophos.old fi

    如果 [ -e /Library/WebServer/Documents/Sophos ] ; 然后 mv /Library/WebServer/Documents/Sophos /Library/WebServer/Documents/Sophos.old fi

    • 创建一个新的

    mkdir /Library/WebServer/Documents/Sophos

    • 并复制最新的 CID

    cp -Rp /private/tmp/Volumes/Terminal/ESXP /Library/WebServer/Documents/Sophos/ESXP cp -Rp /private/tmp/Volumes/Terminal/ES9x /Library/WebServer/Documents/Sophos/ES9x cp -Rp / private/tmp/Volumes/Terminal/ESOSX /Library/WebServer/Documents/Sophos/ESOSX cp -Rp /private/tmp/Volumes/Terminal/savlinux /Library/WebServer/Documents/Sophos/savlinux

    • 设置 Web 访问权限

    chown -R _www /Library/WebServer/Documents/Sophos

    • 并卸载卷

    umount /private/tmp/卷/终端/

    • 并删除挂载点

    rmdir /private/tmp/Volumes/Terminal/ `

    希望这有助于您入门。然后使用 cron 或 launchd 设置重复计划,或者如果您愿意,可以将其设置为注销脚本,以便在用户注销时自动备份文件。

    • 1

相关问题

  • Mac OS X:如何在无头机器上运行 GUI 应用程序

  • 全新安装后要安装到 Mac OS X 的程序列表是什么?

  • 多操作系统环境的首选电子邮件客户端

  • 现在从 mac os 在 NTFS 分区上写入是否安全?

  • 最佳混合环境(OS X + Windows)备份?[关闭]

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    从 IP 地址解析主机名

    • 8 个回答
  • Marko Smith

    如何按大小对 du -h 输出进行排序

    • 30 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    Windows 中执行反向 DNS 查找的命令行实用程序是什么?

    • 14 个回答
  • Marko Smith

    如何检查 Windows 机器上的端口是否被阻塞?

    • 4 个回答
  • Marko Smith

    我应该打开哪个端口以允许远程桌面?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    MikeN 在 Nginx 中,如何在维护子域的同时将所有 http 请求重写为 https? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 bash中的双方括号和单方括号有什么区别? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    kch 如何更改我的私钥密码? 2009-08-06 21:37:57 +0800 CST
  • Martin Hope
    Kyle Brandt IPv4 子网如何工作? 2009-08-05 06:05:31 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve