at命令在2.6.36内核上没法正常运行,请问如何解决或者有无替代软件?(已解决,自己写Shell脚本)

为当前最终发行版之前的所有版本提供支持
回复
头像
zwdnet
帖子: 344
注册时间: 2010-06-09 15:22
送出感谢: 4 次
接收感谢: 1 次

at命令在2.6.36内核上没法正常运行,请问如何解决或者有无替代软件?(已解决,自己写Shell脚本)

#1

帖子 zwdnet » 2010-11-26 19:08

我的Ubuntu是10.04的。at命令是我每天都要用的命令,用来将电脑定时休眠。一个月以前我把内核从2.6.32-25升级到2.6.36(在新立得里进行),结果重启后发现at命令无法正常使用,如下:

代码: 全选

zym@zym-freedom:~$ at "now + 2minutes"
warning: commands will be executed using /bin/sh
at> ls
at> <EOT>
job 7 at Fri Nov 26 18:59:00 2010
Warning: at daemon not running
我看了一下,atd服务的确没有启动,运行sudo /etc/init.d/atd start等都无效,用“sudo grep 'atd' /var/log/messages”看日志,出现如下提示:

代码: 全选

Nov 26 18:36:04 localhost kernel: [   60.129288] non-accessible hardlink creation was attempted by: atd (fsuid 1)
Nov 26 18:36:04 localhost kernel: [   60.142392] non-accessible hardlink creation was attempted by: atd (fsuid 1)
Nov 26 18:36:04 localhost kernel: [   60.152155] non-accessible hardlink creation was attempted by: atd (fsuid 1)
Nov 26 18:36:04 localhost kernel: [   60.160717] non-accessible hardlink creation was attempted by: atd (fsuid 1)
Nov 26 18:36:04 localhost kernel: [   60.167607] non-accessible hardlink creation was attempted by: atd (fsuid 1)
Nov 26 18:36:04 localhost kernel: [   60.178868] non-accessible hardlink creation was attempted by: atd (fsuid 1)
Nov 26 18:36:04 localhost kernel: [   60.187883] non-accessible hardlink creation was attempted by: atd (fsuid 1)
Nov 26 18:36:04 localhost kernel: [   60.194437] non-accessible hardlink creation was attempted by: atd (fsuid 1)
Nov 26 18:36:04 localhost kernel: [   60.201834] non-accessible hardlink creation was attempted by: atd (fsuid 1)
Nov 26 18:36:04 localhost kernel: [   60.210637] non-accessible hardlink creation was attempted by: atd (fsuid 1)
Nov 26 18:48:12 localhost kernel: [   88.164796] non-accessible hardlink creation was attempted by: atd (fsuid 1)
Nov 26 18:48:12 localhost kernel: [   88.178813] non-accessible hardlink creation was attempted by: atd (fsuid 1)
Nov 26 18:48:12 localhost kernel: [   88.190062] non-accessible hardlink creation was attempted by: atd (fsuid 1)
Nov 26 18:48:12 localhost kernel: [   88.205783] non-accessible hardlink creation was attempted by: atd (fsuid 1)
Nov 26 18:48:12 localhost kernel: [   88.215467] non-accessible hardlink creation was attempted by: atd (fsuid 1)
Nov 26 18:48:12 localhost kernel: [   88.226016] non-accessible hardlink creation was attempted by: atd (fsuid 1)
Nov 26 18:48:12 localhost kernel: [   88.232638] non-accessible hardlink creation was attempted by: atd (fsuid 1)
Nov 26 18:48:12 localhost kernel: [   88.239312] non-accessible hardlink creation was attempted by: atd (fsuid 1)
Nov 26 18:48:12 localhost kernel: [   88.246308] non-accessible hardlink creation was attempted by: atd (fsuid 1)
Nov 26 18:48:12 localhost kernel: [   88.253632] non-accessible hardlink creation was attempted by: atd (fsuid 1)
当时我没有其它办法,只好删了升级的内核,还用原来的内核,at命令又能用了。这一个月了,linux内核都到2.6.37了,我也经常检查更新,更新管理器里的内核就是不见升级的,于是今天我又从新立得里手工升级了一次(到2.6.36-1),重启后还是出现同样的问题,at命令用不了,现像跟上一模一样。
这次我在网上又搜了一下,发现这好像是at自己的bug,见这里:https://bugs.launchpad.net/ubuntu/+sour ... bug/598824
文中的解决办法是将at升级到at - 3.1.12-1ubuntu2,我看了一下自己的at的版本,是3.1.11-1ubuntu,新立得里显示的最新版本也是这个。我在网上搜到了3.1.12-1ubuntu2的deb文件,先在新立得里把原来的at给删了,再装这个deb文件。然后再运行,还是不行。我又从这里https://www.securehost.com/mirror/debian/pool/main/a/at/ 下载了debian版的3.1.12-1_i386.deb,把原来的删了装这个,还是不行,症状依旧。
请问大家升级内核后也是这样吗?怎么解决的?
实在不行,我不能为了用这么一个软件就永远用那个内核,永远不升级吧?请问linux下有没有类似于at的其它程序,可以定时执行命令?谢谢!
上次由 zwdnet 在 2010-11-26 23:01,总共编辑 1 次。
您好,请多关照!
头像
qiang_liu8183
论坛版主
帖子: 10688
注册时间: 2006-09-10 22:36
来自: 北京
送出感谢: 2 次
接收感谢: 6 次

Re: at命令在2.6.36内核上没法正常运行,请问如何解决或者有无替代软件?

#2

帖子 qiang_liu8183 » 2010-11-26 19:34

crond 谢谢
看破、放下、自在、随缘、念佛
真诚、清净、平等、正觉、慈悲
头像
zwdnet
帖子: 344
注册时间: 2010-06-09 15:22
送出感谢: 4 次
接收感谢: 1 次

Re: at命令在2.6.36内核上没法正常运行,请问如何解决或者有无替代软件?

#3

帖子 zwdnet » 2010-11-26 19:55

qiang_liu8183 写了:crond 谢谢
谢谢,我搜了下,好像跟at还是有些差别的,这个主要是用在需要周期性执行的情况,而我的情况是要随时可以设定一定时间间隔后执行命令,比如现在是12点,我想再过一个小时让电脑休眠,这其间我可能躺着看电影,看着看着就睡着了。而明天我可能11点就设定让系统过半个小时就休眠。每天设定的时间都不一样。而且crond设定任务好像要编译设置文件,不能在终端命令行下直接设定,有点麻烦。
您好,请多关照!
头像
astolia
论坛版主
帖子: 3201
注册时间: 2008-09-18 13:11
送出感谢: 1 次
接收感谢: 538 次

Re: at命令在2.6.36内核上没法正常运行,请问如何解决或者有无替代软件?

#4

帖子 astolia » 2010-11-26 20:51

gshutdown好像不依赖于at,你可以试试
头像
zwdnet
帖子: 344
注册时间: 2010-06-09 15:22
送出感谢: 4 次
接收感谢: 1 次

Re: at命令在2.6.36内核上没法正常运行,请问如何解决或者有无替代软件?

#5

帖子 zwdnet » 2010-11-26 21:37

astolia 写了:gshutdown好像不依赖于at,你可以试试
多谢,我装了试了一下,不错,但是好像只有关机,重启,注销三项,没有休眠。我正在写一个脚本,想自己搞定。
您好,请多关照!
头像
zwdnet
帖子: 344
注册时间: 2010-06-09 15:22
送出感谢: 4 次
接收感谢: 1 次

Re: at命令在2.6.36内核上没法正常运行,请问如何解决或者有无替代软件?

#6

帖子 zwdnet » 2010-11-26 22:02

搞定了!用这个脚本就可以定时休眠了。
sleep.sh

代码: 全选

#!/bin/sh

#用于定时休眠的脚本,因为at命令在内核升级后无法用,就用shell编程自己实现

#判断参数并延时
if [ $# -ne 2 ]
then
    echo '输入参数错误,格式为 sleep.sh -h/-m time。其中time是休眠间隔时间'
elif [ $1 = '-m' ]
then
    sleep $2m
elif [ $1 = '-h' ]
then
    sleep $2h
else
    echo '输入参数错误,格式为 sleep.sh -h/-m time。其中time是休眠间隔时间'
    exit 1
fi

#执行休眠
exec hibernate --lock-console-as zym

exit 0
用sudo ./sleep.sh -m 1 就是在1分钟后休眠,测试成功。但是我还有个问题:sudo不是有个时间限制,过了就没用吗?如果我设定60分钟,在前面延时60分钟,到最后执行hibernate的时侯(这里需要root权限)会不会我前面输的sudo已经失效了?
您好,请多关照!
头像
zwdnet
帖子: 344
注册时间: 2010-06-09 15:22
送出感谢: 4 次
接收感谢: 1 次

Re: at命令在2.6.36内核上没法正常运行,请问如何解决或者有无替代软件?

#7

帖子 zwdnet » 2010-11-26 23:00

测试了,30分钟也是可以休眠的。解决啦,谢谢几位!
这是完整的脚本:

代码: 全选

#!/bin/sh

#用于定时休眠的脚本,因为at命令在内核升级后无法用,就用shell编程自己实现

#判断参数并延时
if [ $# -ne 2 ]
then
	echo '输入参数错误,格式为 sleep.sh -h/-m time。其中time是休眠间隔时间'
elif [ $1 = '-m' ]
then
	min=$2
	echo '当前时间为:'
	date 
	echo 系统将在$min分钟后休眠
	sleep $2m
elif [ $1 = '-h' ]
then
	hour=$2
	echo '当前时间为:'
	date 
	echo 系统将在$hour小时后休眠
	sleep $2h
else
	echo '输入参数错误,格式为 sleep.sh -h/-m time。其中time是休眠间隔时间'
	exit 1
fi

#执行休眠
exec hibernate --lock-console-as zym

exit 0
您好,请多关照!
回复

回到 “老旧版本支持”