docker中无法使用crontab的问题

最近在docker里使用crontab设置定时任务,发现crontab到时间没有执行。

第一个想到的是时区问题,查看了一下时区,是UTC时区,赶紧改成了Asia/Shanghai

使用date命令查看,时间没问题了。设置个时间测试一下,结果仍然不执行。

检查crontab任务是否启动

一切正常啊,奇怪。

装上rsyslog并启动,查看相关日志:

里面说set_loginuid failed,这个似乎是个认证模块,因为安全原因,被docker默认禁用掉了。修改/etc/pam.d/cron,把下面这行注释掉(也可以使用更高的权限启动容器,比如gdb无法使用的情况):

也可以把中间的required修改为optional来解决。

重启cron,运行成功。

同样的,ssh也会有这样的问题,因为也用到了pam认证模块,可以参考下面给出的链接来解决。

参考:

docker容器中crontab无法正常运行解决方案
Dockerize an SSH service

环境参考:

Docker版本:1.13.1
系统:archlinux

emacs使用ELPA管理扩展

平时我们使用emacs的时候都是自己去找扩展,然后找各种依赖进行安装,这个很麻烦,emacs 24以后完全可以在emacs内部直接安装。emacs从24开始内置支持ELPA(Emacs Lisp Package Archive),支持emacs使用package.el管理扩展。

我们在.emacs里面增加安装源:

然后我们使用 M-x 初始化一下包环境:

更新包的索引:

获取想要的包:

emacs 23也是可以用的,不过需要增加一个初始化的脚本。

细节可以参考:http://www.emacswiki.org/emacs/ELPA

禁用emacs的工具栏

osx下使用emacs的时候,如果使用了--with-ns选项,会nextstep目录下生成一个Emacs的app文件,我的是24.3.2,用起来还不错,至少是可以全屏的。

也许有人想要关闭上面的工具栏,如果像一些模式一样在.emacs里面写上:

但是其实这个是不会生效的。

查看一下源码发现选项是1和0,所以我们只需要写成如下方式:

但是如果同时还想使用命令行的emacs,会发现cli下是没有tool-bar-mode的,所以需要判断一下window-system:

这样就可以安心的禁用工具栏了。

Shell编程中的几个命令

介绍几个命令:echo, eval, exec, export, readonly, read, shift, wait和点(.)。

1.echo

格式:echo args

功能:在屏幕上显示出由args指定的字串。

2.eval

格式:eval args

功能:命令eval的功能是將参数(args)读入 C shell 中,然后在加以执行。例如:

vcom 是 'ls -l ; date'。当我们來执行“$vocm”,会出现错误信息ls: invalid option -- ;”及“try 'ls --help' for more infomation”。原因是 C shell 在语法解析中无法理解特殊符号所造成的。符号“;”和命令 date 被理解成是命令 ls -l 后的“文件名称”。所以才会有“ls: invalid option -- ;”。命令eval 便是用來解决这种情況:

其实在作法上使用命令 eval 便相当于以下的用法:

如果你是在 C shell 下,你也可使用以下的方式:

另外在使用命令 eval 上也有技巧,看一互換的技巧:

3.exec

格式:exec命令参数

功能:当Shell执行到exec语句时,不会去创建新的子进程,而是转去执行指定的命令,当指定的命令执行完时,该进程(也就是最初的Shell)就终止了,所以Shell程序中exec后面的语句将不再被执行。

继续阅读

获取Texture packer的免费授权码

制作cocos2d游戏的时候会经常需用精灵画册(sprite frame),如果使用精灵画册可以明显提高游戏的效率。很多人都选择使用Texure packer,这个工具不止支持cocos2d,他还支持超级多其他的引擎,最近刚出的3.1.3还添加了对Spirte kit的支持。

我在试用一周后开始考虑入手这个工具,有人说免费的就很好用,其实不是这样的,免费版会给一些图片增加作者的网址,你会发现图片一片红……

后来突然发现作者也发免费授权的,前提是你要有自己的博客,这个博客至少写了6个月,而且需要有5篇以上的相关文章。我前天发的申请,昨天收到了作者的邮件,我突然发现作者热心的把PhysicsEditor的key也给我了(申请的时候我没选择要这个),真不错。

申请地址:http://www.codeandweb.com/request-free-license

邮件末尾还说如果你写一个这个工具的入门教程,他可以考虑把你的文章放到他站点上给你提高访问量,不过我还没用明白,先算了,虽然我的博客的确没什么访问量。

安装command line tools for xcode

升级了XCode5之后发现command line tools的安装选项消失了,出现在了

Xcode -> Preferences... ->  Locations

选项中。最后一项的 command line tools显示了在本地的安装情况,貌似还可以自行切换版本。所以如果你的恰好是xcode5+,那么恭喜你,你应该不需要安装这玩意儿了。打开终端看看gcc是不是最新版吧。

如果还是没有gcc之类的工具的话,那么可以看看下面删除线划掉的旧部分。如果你的版本是xcode4.6左右,那么可以看末尾的部分。

也许是安装xcode会自动给安装command line tools了,我查看了一下自己的gcc版本,发现是5.0,如果真是这样,请读者自己考虑是否继续安装),可以打开终端后输入如下命令:

sudo xcode-select --install

输入密码后会弹出提示(xcode-select: note: install requested for command line developer tools),然后安装命令行工具(install command line developer tools)。

如果您的版本是XCode 4.6,方法如下:

其实这个很好找,但是网上很多误导人的文章,很让人不爽。

打开xcode以后,点击菜单栏的:

Xcode -> Preferences... ->  Downloads

这时候你应该就可以看到Command Line tools了,在Components选项卡里。其实ios模拟器也是这里安装的,大家应该可以看到。

补充:xcode第一次安装完需要启动一次,同意xcode的协议,不然command line tools是无法使用的,如果你自己跑一下cc或者gcc会发现报下面的提示:

Agreeing to the Xcode/iOS license requires admin privileges, please re-run as root via sudo.

打开xcode同意协议就可以啦。

Emacs SLIME的安装

安装SLIME:

在.emacs中添加如下内容:

这里要注意以下几点:

  • 这里的sbcl的地址是可执行程序的地址,不然会提示“specified program for new process is a directory...”这类错误
  • slime地址是slime所在文件夹地址

设置好后重启emacs就有slime-mode了,需要slime命令行直接M-x slime就可以了。

关于zend studio 9的4空格替换tab

现在越来越多的人开始使用四个空格来替换一个tab。用python的时候普遍使用这个规范,现在开发PHP的人使用这个规范的也越来越多,现在介绍一下zend studio是如何实现tab转为4个空格的。

下面是以zend studio9为示范的(貌似不适用于zend studio8):

如果您是使用英文版,那么window -> perferences进去选项里面,中文请自己对照一下。

然后我们选择php -> code style ->  Formatter,选择里面的 Zend Framework Coventions[build-in]就可以了,然后保存。因为Zend Framework的标准就是使用四空格替换TAB。

zend studio设置Zend framework样式

zend studio设置Zend framework样式

继续阅读

使用authorized_keys不生效的解决方法

配置git的公钥登陆时,配置完authorized_keys居然一直不生效,于是google之,发现原来是因为.ssh目录和下面文件的权限问题导致的,因为目录的权限已经超过了sshd的要求权限。于是我们使用下面的命令去掉 多余的写权限:

这样应该就可以了,试着git clone一下吧。
如果希望ssh公钥生效,.ssh目录的权限必须是0700, .ssh/authorized_keys文件权限必须是0600。

我们的git可以clone了以后,我们会担心有些人越权,使用git这个账户直接ssh登陆,这样似乎不太符合我们的要求。我们可以修改git的登陆shell,达到git无法使用shell登陆的目的。比如在ubuntu或者debian下:

查找passwd的git那行,可以看到下面类似的文本:

我们把shell换一下,改成git-shell:

如果我们想换成git登陆,会提示下面的信息:

执行make时报告没什么可做的解决方法

当我们编写好Makefile并执行make时,我们有时会碰到类似下面的提示:

make: 没有什么可以做的为 `default'。

据说碰到这种情况的原因很多,就是因为make跑到default时发觉自己并没有被安排什么工作,但是其实我们是安排的不少活给它的。

我们开发的时候喜欢使用空格代替tab缩进,这样就有可能导致上面的问题。比如我们使用了vim,同时我们还没事写点python程序娱乐那么一下,那么就十分有可能使用了“:set expandtab”打开了空格代替tab缩进的开关。所以我们每次写makefile的时候不要忘记使用“:set noexpandtab”来关闭空格代替tab缩进开关。当然如果你希望彻底关闭,也可以到你的vimrc中删除“set expandtab”。