我已经复制这个问题在这里从StackOverflow … 我已经从EPEL仓库(0.5.9)安装incron(在你问之前;是的,我也尝试下载源代码并在本地编译(0.5.10);结果相同),并试图在我的CentOS 6.4上build立一个进程(最后)的虚拟盒子,我已经成功地在我的本地Ubuntu 12.04机器(包括incron在Ubuntu下工作的机器上)成功的原型: 有些信息在前面: SELinux被设置为PERMISSIVE(我也试过了DISABLED,这似乎没有区别!) 我已经使用visudo添加了我的脚本和被称为可执行文件的所有NOPASSWD来解决一些权限问题… 我曾尝试应用incron的政策为这里desribed http://blog.siphos.be/2013/05/a-selinux-policy-for-incron-finishing-up/,但我不断收到 libsepol.policydb_read: policydb magic number 0x696c6f70 does not match expected magic number 0xf97cff8c or 0xf97cff8d semodule_package: Error while reading policy module from incron.te 当我尝试使用semodule_package 我已经尝试在脚本本身和前脚本caller.sh定义环境,通过这样做我能够env > /tmp/envfile.txt ,它指示脚本运行在sudo env的克隆中(如我打算)但是我仍然得不到我的脚本输出,无论是它应该对input文件或它的任何日志做的工作… 它的权限是正确的? (我只是在做根文件系统上的chmod -r 777时候再花一天的时间;)) 在Ubuntu 12.04下,执行sudo incrotab -e和input/tmp/ IN_CREATE,IN_NO_LOOP env > /home/username/envfile.txt的简单行为表明incron已经在root / sudo环境中运行了,正如incron文档所指出的那样是。 这是所有与SELinux相关的东西,还是在CentOS中有其他的事情呢,这是如此困难? 如果我使用sudo /path/to/my/script.sh […]
我正在寻找像内核的inotify函数一样的shell命令。 有没有一个命令可以监视一个目录,可以像这样使用: while [ 1 ]; do name-of-monitor-program . && echo "something changed" done
我正在运行find . -type d find . -type d在一个相当大的目录树上。 我只对在这棵树里find目录感兴趣,但是当我对进程运行一个strace以确保它正在做我期望的操作时,我注意到有大量的操作被浪费在运行fstat的文件上在树内。 newfstatat(AT_FDCWD, "file1", {st_mode=S_IFREG|0600, st_size=7690, …}, AT_SYMLINK_NOFOLLOW) = 0 newfstatat(AT_FDCWD, "file2", {st_mode=S_IFREG|0600, st_size=7696, …}, AT_SYMLINK_NOFOLLOW) = 0 newfstatat(AT_FDCWD, "file3", {st_mode=S_IFREG|0600, st_size=7687, …}, AT_SYMLINK_NOFOLLOW) = 0 newfstatat(AT_FDCWD, "file4", {st_mode=S_IFREG|0600, st_size=10455, …}, AT_SYMLINK_NOFOLLOW) = 0 发现不知道一个inode指向一个目录,直到它执行一个fstat? 如果是这样的话,这将需要很长时间。 其中的一些目录可能有数以百万计的内容,但我真的只关心目录。 最终,我想要在我的文件树中的每个目录的dirsize和path的报告。 什么是最快/最有效的方式来做到这一点?
这是脚本 bash –version | head -n1 if [ "$1" == "now" ] then echo if now execut job else echo else "_"$1"_" # make sure we are not picking any spaces if [ condition ] then execut something else fi fi ./script now if now 如果从交互式shell运行,则按预期工作。 但是,如果从cron调用,则if转到else块 * * * * * root /home/user/./script now […]
我正在为使用Linux的设备开发软件和configuration。 我被要求提供一个pipe理界面,不需要知道Linux的使用和限制能力。 我相信处理这个问题的最好方法是使用控制台login(通过ssh或串口)来显示一个选项菜单。 假设我有一个名为admin_menu的程序来处理所有我想要的任务。 所以,我应该可以像这样在/ etc / password中创build一行: admin:x:230:235:Administrative Interface:/home/admin:/local/sbin/admin_menu 当我创build我的admin_menu程序时,是否有任何特殊的注意事项需要注意? 直接的答案是好的,但指向好的文档甚至更好。 我想了解更多信息的一般领域是: 我可以期望设置什么样的环境variables? 我需要哪些设置自己? 产卵子过程有什么特别的考虑吗? 终止我的菜单过程会发生什么? 我是否使用STDIO与控制台或其他接口进行交互?
有一个非常类似的问题,但我有一个额外的细节在我的情况。 基本上我使用ControlMaster来加速SSH连接。 所以我正在使用: CurrentUser=$(whoami) session=$(ps -el | grep $(id -u) |sed -e 's/sshd//g'| grep ssh) if [ "$session" = "" ] then ssh -TMNf [email protected] & fi 在这个代码之后,我有另一个命令。 ssh命令的目的仅仅是在后台运行,以便为更快的连接保持开放的套接字(如果短时间内没有发生呼叫,则由于不活动而超时和closures)。 问题是这个脚本不closures并返回给调用者。 它成为一个<defunct>进程,并且不会返回,直到我手动杀死创build的ssh会话。 我怎样才能让脚本返回到调用者,并创build的SSH在后台运行? 编辑: 我希望脚本结束后保持创build的ssh会话保持打开一个套接字与rsync命令后更快的连接。 随着一个开放的sockets,我从3-4秒转移到毫秒
我不断收到这个错误,你们知道什么是错的吗? rapache是重启apache的别名 mugbear:/usr/bin# cat /usr/bin/mkdomain if [ -d "/srv/www/$1" ]; then echo "Domain $1 already exists!" else mkdir -p /srv/www/$1/public_html mkdir -p /srv/www/$1/logs cat >> /etc/apache2/sites-available/"$1" << EOF <VirtualHost removed:80> ServerAdmin support@$1 ServerName $1 ServerAlias www.$1 DocumentRoot /srv/www/$1/public_html/ ErrorLog /srv/www/$1/logs/error.log CustomLog /srv/www/$1/logs/access.log combined </VirtualHost> EOF a2ensite $1 rapache fi mugbear:/usr/bin# mkdomain test.com /usr/bin/mkdomain: line 19: […]
我试图非常简单地运行一个可执行文件并传递一个文件path作为第一个参数。 在DOS中,这将是命令: import.exe "C:\Some Path\With\Spaces.txt" 通过将path放在引号中,path将作为第一个标记正确parsing到可执行文件中。 在PowerShell中,我使用这个: $feeds = dir 'T:\Documents\Company\Product Development\Data foreach ($feed in $feeds) { start -FilePath import.exe -ArgumentList $feed.FullName } PowerShell中的Start-Process cmdlet的问题在于它使用string数组作为参数,所以path被分解并作为单独的标记发送到可执行文件,或者作为没有这些重要的引号的string有效地发送。 将引号添加到我的PowerShell命令行强制“$ feed.FullName”从字面上处理。 而双引号使得PowerShell在参数列表中看不到任何东西。 “论点是空的或空的。” 它告诉我。 我期望这是一个已知的头痛,从一开始就有一个已知的解决方法。 谢谢 卢克 更新和响应 foreach ($feed in $feeds) { Invoke-Expression "start import.exe `"$feed.FullName`"" } 注意:我使用的是Start,因为尽pipe将我的位置设置到了import.exe所在的文件夹,PowerShell似乎已经被写入来查找文件系统当前位置的可执行文件。 该variables被解释与.FullName作为一个文字string!: filename.txt.FullName 这个: foreach ($feed in $feeds) { Invoke-Expression "C:\Users\Public\Documents\~Main\Data.Importer\Data.Importer\bin\Release\import.exe […]
我有一个用utf8编码的bash脚本。 在脚本中,我使用sed命令使用§作为分隔符。 现在当我运行执行此脚本sed抱怨分隔符。 如果我使用正常字符作为ex @的分隔符,那么一切正常。 我已经在腻子中看到脚本[在putty中设置utf8],字符显示正常。 另外从locale命令显示的Linux默认字符集显示 LC_CSET=en_US.UTF-8 可能出了什么问题? 早些时候,我曾经有shell脚本windows-1252编码,这用于工作。
我有一个.reg脚本: Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SeleniumRC\Parameters] "Application"="C:\\Program Files (x86)\\Java\\jre6\\bin\\java.exe" "AppDirectory"="D:\\SeleniumRC" "AppParameters"="-Xrs -jar selenium-server-standalone-2.0b1.jar" 我想运行它从.bat文件,而不是D:\ SeleniumRC我想通过当前目录。 我怎样才能做到这一点?