我们在一个4D数据库中有大量的数据集。最近,我们需要自动化某些任务来导出、导入或处理数据,这需要在4D和unix (bash和zsh)之间建立某种连接。每当4D函数必须使用发射外部过程指令调用shell命令或shell脚本时,我们都做得很好。但是我在做相反的事情时遇到了困难,我从shell脚本启动了一个4D函数。在线文档并没有给我任何建议来做这件事。
我将如何在特定的date+time上运行4D函数? 4D本身似乎并没有提供一种调度操作的方法。OS为以后任何时候(每周或每月)启动命令提供了一种非常好的方法。我只是不太了解4D,不知道如何从shell脚本调用4D函数。如果是MySQL或PostgreSQL,那么我就没有问题,因为我可以调用mysql或pgsql客户机,它可以不用GUI工作。我能用4D做一些类似的事情吗?
发布于 2017-10-15 16:41:25
在4D中,有几种方法可以实现这一点。我通常是这样做的,就是在4D中使用web服务器。然后,我会使用我喜欢的任何调度程序(cron、windows调度程序等)来触发GET或POST服务。这确实需要从4D获得一些web服务器的许可。
这使您可以灵活地在给定的时间或从外部进程触发事件。假设您的数据已经清除,现在可以导入,您不必等到下一次导入时,它就会被触发。
或者,您可以创建一个在自己的进程中运行的4D方法。您在数据库启动时启动该进程,然后它将无限期地循环,检查它是否需要触发您想要的任何操作。
看看New process、DELAY PROCESS和While...End While命令。您可以启动新进程在服务器或客户端上运行,这取决于您的需要。
基本上,您的启动方法调用New来运行您的“调度程序”方法。在该方法中,您有一个While (一些真正的条件)循环,检查它是否应该运行。然后,它会休眠(延迟进程)一段时间,这样它就不会占用资源,再次醒来并运行循环。
如果您希望能够以编程方式停止此操作,则可以使用SET PROCESS变量从外部设置调度程序进程中变量的值。然后让循环检查这个值,看看它是否应该退出。
发布于 2019-11-02 19:29:58
要回答你的问题,如果你想从外壳调用4D,你应该使用一个插件(cfr,https://www.pluggers.nl/product/scripting-tools/ )和文字记录。
https://stackoverflow.com/questions/46756103
复制相似问题