是否可以从 unix shell 脚本 (Mac) 启动 4D 数据库功能?

Can a 4D database function be started from a unix shell script (Mac)?

我们在 4D 数据库中有大量数据集。最近我们需要自动化某些任务来导出、导入或处理数据,这需要 4D 和 unix shell(bash 和 zsh)之间存在某种联系。 每当 4D 函数必须使用 LAUNCH EXTERNAL PROCESS 指令调用 shell 命令或 shell 脚本时,我们都做得很好。但是我在做相反的事情时遇到了麻烦,从 shell 脚本启动 4D 函数。在线文档没有给我任何关于如何执行此操作的建议。

我如何 运行 在特定日期+时间的 4D 函数? 4D 本身似乎没有提供安排动作的方法。 OS X 提供了一种在未来任何时间(每周或每月)启动命令的完美方式。我只是不太了解 4D,无法弄清楚如何从 shell 脚本调用 4D 函数。如果是 MySQL 或 PostgreSQL 那么我没有问题,因为我可以调用 mysqlpgsql 客户端,它可以在没有 GUI 的情况下工作。我可以用 4D 做类似的事情吗?

有几种方法可以在 4D 中完成此操作。我通常这样做的方式是在 4D 中使用 Web 服务器。然后我会使用我喜欢的任何调度程序(cron、windows 调度程序等)通过 GET 或 POST 触发该服务。这确实需要 4D 的一些 Web 服务器许可。

这使您可以灵活地在给定时间或从外部进程触发事件。假设您的数据已清理并准备好导入,您不必等到下一次导入时间,它可能会被触发。

或者,您可以创建一个 4D 方法,该方法 运行 在其自己的进程中。您在数据库启动时启动进程,然后它会无限循环,检查它是否需要触发您想要的任何操作。

查看新进程延迟进程While...End While 命令。您可以根据需要在服务器或客户端上向 运行 启动新进程。

基本上,您的 On Startup 方法会调用 New Process 到 运行 您的 'scheduler' 方法。在该方法中,您有一个 While(某些真实条件)循环来检查它是否应该 运行。然后它会休眠(延迟过程)一段时间,这样它就不会占用资源,再次醒来并运行循环。

如果这是您希望能够以编程方式停止的东西,您可以使用 SET PROCESS VARIABLE 从外部设置调度程序进程中的变量值。然后让循环检查该值以查看它是否应该退出。

为了回答您的问题,如果您想从 shell 在 Mac 上调用 4D,您应该使用来自 Pluggers (cfr https://www.pluggers.nl/product/scripting-tools/ ) 和 osascript 的插件。