我是Linux新手,这似乎是一个容易解决的问题,但我对解决方案感到茫然。我想在写入某个目录时执行脚本。我打算在该文件夹上安装一些能够触发脚本运行的观察程序。我在网上找到了关于使用incron,watch或inotify的条目。我认为incron是我想要的,但绝对没有在线资源可以引导您完成整个过程。我是否正确想要使用incron?如果是这样,我该如何让它工作?在我的incrontab我有
/home/myusername/folder IN_CLOSE_WRITE /var/www/runMe.sh
我尝试了一些变化,但看起来这是正确的。我一直在网上看几个小时,所以我非常沮丧。我创建了一个incron.allow文件,其中列出了root和myusername,我启动了incrond服务,但是当上面指定的目录被写入shell脚本时,不执行。我在CentOS 6.5上,该目录由另一台机器写入。感谢您提供的任何帮助。
答案 0 :(得分:0)
这是一个Gtkmm示例,用于检测何时在目录中创建文件或文件夹:
#include <glibmm.h>
#include <giomm.h>
#include <iostream>
void file_changed(const Glib::RefPtr<Gio::File>& file, const Glib::RefPtr<Gio::File>& otherFile, Gio::FileMonitorEvent event)
{
if(event == Gio::FILE_MONITOR_EVENT_CREATED ){
std::cout << "File created: " << file->get_path() << std::endl;
}
}
int main(int argc, char* argv[]) {
if(argc < 2) {
std::cerr << "Usage: " << argv[0] << " directory_to_monitor" << std::endl;
return 1;
}
Glib::init();
Gio::init();
Glib::RefPtr<Glib::MainLoop> loop = Glib::MainLoop::create();
Glib::RefPtr<Gio::File> file = Gio::File::create_for_path(argv[1]);
Glib::RefPtr<Gio::FileMonitor> monitor = file->monitor_directory();
monitor->signal_changed().connect(sigc::ptr_fun(file_changed));
loop->run();
return 0;
}
使用
进行编译g++ -o test test.cpp $(pkg-config --cflags --libs glibmm-2.4 giomm-2.4)
答案 1 :(得分:0)
您应该阅读inotify(7)并考虑使用incron