Linux小型日程表挑战大型群件
核心提示:文章标题:Linux小型日程表挑战大型群件。Linux是中国站长站的1个技术频道。包括桌面利用,Linux系统治理,内核研究,嵌进式系统和开源等1些基天职类
群件很强大也很重要。假设需要,可以购买1个群件系统。或多是1个集群——有1个使用了RAID的专用的数据库服务器,和磁带备份的保证,还有单独的机器来运行界面。为甚么?固然是由于它更可靠,而且可以根据负载扩大!
不过,您可能不会处理非常多的调度任务,以致于需要使用消耗大量内存的利用程序。可能只是需要某种基于Web的日程表界面,和核对需要做的项目的能力。
可能其实不需要30兆字节大小的类库、由1组本体专家(ontologists)来设计对象模型,或依托15个其他软件包。这里是我的目标:尽可能只使用系统附带的功能来运行那些利用程序。
业务的第1个步骤
首先,需要确保老机器可以运行某个Web服务器和某些CGI脚本。方便的是,我们的机器已具有了1个Web服务器,其根位于/var/www/htdocs.检查配置文件(/etc/apache/httpd.conf),可以发现默许把ExecCGI和Includes都封闭了——不过我想把它们打开,让我的Web页面华丽而生动。
清单1.使用服务器端解析的文件
[...]AddHandlercgi-script.cgi##Touseserver-parsedHTMLfiles#AddTypetext/html.shtmlAddHandlerserver-parsed.shtml[...]
完成后,履行apachectlrestart,让Apache重新加载其配置文件。为节俭以root身份登录的时间,可以将/var/www/htdocs的所有者设置为您的个人帐号。我这样做了,而且还删除在线手册和默许的索引页。
在计算机科学中有1句谚语,“百分之10的工作可以解决百分之910的题目”。就此想法,我为这个利用程序制作了1个首页草稿,包括了这个程序预期的主要工作:
清单2.首页草稿
Yo!Dothedishes.
现在只需要测试CGI处理。我的测试叫做env.cgi,其实不大,但是很实用:
清单3.“CGI-处理”测试脚本
#!/usr/bin/perl-wuseEnv;useCGI;print"Content-Type:text/plain\n\n";foreach$k(sortkeys%ENV){print"$k:$ENV{$k}\n";}exit0;
您会留意到,我实际上并没有使用CGI模块;之所以援用它,是为了确保它已安装。将它放在适当的位置,我可以确认CGI脚本正在运行。我将机器在网络上命名为“crate”,所以,对http://crate/env.cgi的访问结果如我所想:
清单4.确认CGI脚本正在运行
[...]REMOTE_ADDR:205.166.146.66REMOTE_PORT:62594REQUEST_METHOD:GETREQUEST_URI:/env.cgiSCRIPT_FILENAME:/var/www/htdocs/env.cgiSCRIPT_NAME:/env.cgiSERVER_ADDR:205.166.146.93SERVER_ADMIN:root@midas.slackware.lanSERVER_NAME:crate.plethora.netSERVER_PORT:80SERVER_PROTOCOL:HTTP/1.1
那非常有益于调试——它发现我那部份有1个毛病。我忘记往修改httpd.conf中的ServerAdmin行了。很轻易修改。
#p#分页标题#e#安全性是早期出现的题目之1。您不会希看让所有人都可以留下关于午饭所有者的危险记录。进进访问控制。
这需要对httpd.conf进行更多修改,答应.htaccess文件限制对站点的访问。那表示要向答应访问列表中添加“LimitAuthConfig”,覆盖顶层配置文件。
接下来需要1个.htaccess文件。从这里开始:
清单5..htaccess文件
AuthUserFile/var/www/htpasswdAuthGroupFile/dev/nullAuthName"RoommatesOnly"AuthTypeBasicrequirevalid-user
htpasswd文件其实不是以普通情势存在于文档树中。那样做是有目的的;不能为攻击者创造有益条件。可使用htpasswd命令初始化htpasswd文件:
清单6.初始化htpasswd文件
#htpasswd-c./htpasswdseebsNewpassword:Re-typenewpassword:Addingpasswordforuserseebs
-c选项让htpasswd创建1个新文件。当创建另外的用户时不要使用它;否则,只有最新的用户才能够登录。完成后,尝试访问页面将会要求输进口令。给出用户名和密码,然后便可以进进了。$REMOTE_USER将被设置为用户名,以使得脚本可以知道谁在使用它们。
我不喜欢漫长的离别
因而,您可以登录进进。不能登录出往——出于未知的缘由,多数浏览器通常不答应刷新所要求的用户名/口令组合的内存。可以刷新cookies,可以刷新缓存——但是浏览器可能依然以为它知道您要做甚么。
所以,假设登录到公用的计算机,那末在离开之前1定要封闭全部浏览器。否则,人们可能碰巧会看到您的家务琐事列表,而不是他们自己的,这样就会出笑话了。假设这确切是个题目,那末可使用cookies.
虽然如此,这使得系统答利用户使用他们自己的用户名登录,对让用户添加记录来讲就足够了。只要有添加记录的途径!
#p#分页标题#e#室友记录
实现此目标的基本概念很简单:公然地张贴有时间标记的消息,用户可以读取。Berkeleymsgs工具恰好是所需的复杂程度(也就是说,几近根本就不难)。每个文件将包括1个名称、1个时间标记和1些文本。系统将向用户显示特定时间段的消息,或将用户最后1次访问以后张贴的消息显示给他们。
要读取的消息的数目应当暂时不重要,所以我将使用最简单的所有文件格式:目录中的全部文件,每个文件中,第1行是1个时间标记和1个用户名,然后是1些文本。这乃至不需要为文件豫备数据库;文件系统的灵活性就足够了。(您可能会问我为甚么不直接使用文件系统中的时间标记;答案是我其实不相信它,由于粗心的用户会破坏它。我的很多目录中所有的文件都具有相同的时间标记。)我确切需要某种类型的数据库,用于用户和他们的最近的时间标记,所以每个用户都将具有1个数据文件,现在其中包括有1个时间标记。
全部项目很小,只使用1个CGI脚本便可以够借助Perl的标准CGI模块来实现。目标是折衷所需附加代码(尽可能少)和所需开发时间(尽可能短)。在本例中,系统所附带的功能是足够的。
/var/www/msgs是1个新目录,用于保存消息(以数字命名的文件)和用户记录(使用.htaccess文件中给出的用户名作为文件名)。CGI脚本会辨认本身,履行被要求的动作,并展现出相当简单的界面;它所需要的只是1些按钮和1个文本区域。为了表示尊重,这个脚本命名为msgs.cgi.
开发进程中触及了1些设计方面的考虑。
乃至不需要往解析日期,由于在大部份情况下可以简单地让用户使用按钮(最近24小时、上1周、自上1次访问,和所有消息)。
以数字为名称的文件可以简单地由内置的glob来辨认,它能够方便地整理文件。不过,假设数字的位数产生了变化,整理就会产生毛病,所以要给出前导的零。
脚本并没有精心肠往分辨主题,而只是为每条消息的第1行使用了H3标签。
程序假定输进消息的全部HTML都是没有恶意的。假设室友没有足够的幽默感,那末用户在写进时应当仔细检查。
这个脚本非常短小,只有2K多1点。不过,它也有潜伏的开消,由于CGI库实际上很大。但是相对更大的系统,它还是非常小的,而且它提供了1个适当的途径让用户张贴消息并让其他人方便地进行查看。
图1.虽然针对室友的记录的实现方法产生了变化,但其基本特性没有产生变化
可能以后会开发某些方法来指定时间范围或搜索函数。最好也要有删除较老消息的方法。
固然如此,相对贴在冰箱上的淡黄色便笺,这是1个可靠而实际的创新。
谁知道Sam往哪儿了?
偶然室友的题目会是他们到底往哪里了。我其实不是要讨论,当要付房租或分担公共用度时,某些人却不能不离开房间——而只是说某个人,比如1个朋友,打电话过来问“您知道他在哪儿吗?”或“您知道他甚么时候回来吗?”
要说有甚么不同的地方,那末就是这个脚本更短小,写起来更简单。遵守相同的基本方法:只需要创建名字为用户名的文件,其中包括有时间标记、可能要离开多少小时和简短描写。然后,每找到这样1个文件,打印1个扼要描写。
“I'mback!”按钮会删除那个文件,由于可能人们其实不需要知道您曾在哪儿(假设故意外,这有助于证实您不是爪牙)。与之相对照,能知道某人曾要往哪里是有用的,所以文件不会由于变成老文件而被删掉。
我觉得1个好的、简单的群组日程安排软件非常类似于HarryPotter丛书中Weasley的起居室里的那个时钟。它有9个黄金指针,每个上面刻有1个家庭成员的名字。边沿上没有数字,而是标记为位置和状态——家、工作、学校、旅行、走失、致命危险,等等。(还有1个厨房时钟,它有1个指针和“timeforthis”和“you'relate”标记。)
#p#分页标题#e#日程计划任务
所需要的最后1件事情是日程计划。我们如何处理家务事的常规提示?轮到谁来洗衣服?轮到谁来涮碗?不需费力便可以够定期地安排这些任务。
处理垃圾可能对每个人来讲都是琐碎的工作,但是我们所需要的只是张贴公然提示的某种方法。现在您应当对此有了1些想法。固然是使用另外1个脚本和它自己的自定义数据库文件。
只是目前还不需要它。这个项目的难点在于调度任务。要编写能够表达类似于“everyThursdayistrashnight”或“someoneneedstodothedisheseverynight”等想法的代码1点都不简单。
不过这些代码已编写好了,叫做cron.我们所需要的只是公布消息的某种途径。可以知道,为本月项目的第1部份已编写的消息程序,可以正确地满足我们的要求。为消息目录赋予写权限(例如,root有使人羡慕的特权),尝试这个命令:
$REMOTE_USER=bob/var/www/htdocs/msgs.cgi"action=PostMessage""message=Testmessage"
现在,往查看那些消息。很酷,不是吗?已能够通过运行命令添加新消息,也就是说cron(可以根据日程安排运行命令)满足了我们全部的需求。
有1个小型的Web界面来创建这些任务可能会更好,但是由于这些东西很少修改,所以可能其实不需要。这将处理所有需要常规提示的任务。不需要常规提示的任务可以手工输进,或使用at(1)设置为在适当的时候输进。
总结与说明
本月支出为$0,这非常好。没有进行任何下载,只是要在本地进行1些输进。利用程序有1些简单,但是它们能完成应当作的事情,而且代价低廉。
进1步讲,它们足够简单,能方便地更新。最大的弱点是安全性;没有投进任何精力来保护这些程序不受最多见进侵的危害。其中1方面缘由是,在大部份情况下那不是个大题目。
不过,假设您计划与懂技术的室友1起使用这些,那末有很多种方法可让程序更加安全。例如,假设不答应通过命令行运行msgs.cgi脚本,那末需要考虑使用另外的方法来调度任务。(实际上有1个非常简单的方法,就是使用命令行浏览器和精心构造的URL,这些留给读者往练习)。
古老的机器的下1篇文章:使用Web页开灯。可用的x10硬件和Linux驱动程序使得我们能够完成所有那些有用的事情,比如在起床前半小时打开咖啡壶(coffeemaker)。
TAG:用户,文件,脚本,消息,标记
评论加载中...
|