rc.local 和 Python 脚本

2 投票
2 回答
3934 浏览
提问于 2025-04-16 16:17

我想在Ubuntu Server 10.10机器启动时自动运行一个脚本。

我的rc.local文件的相关部分看起来是这样的:

/usr/local/bin/python3.2 "/root/Advantage/main.py" >> /startuplogfile
exit 0

如果我从/etc目录运行./rc.local,一切都正常,它会在/startuplogfile中写入以下内容:

usage: main.py [--loop][--dry]

为了测试,这正是我需要的结果。但是当我重启电脑时,它不会在startuplogfile中写入任何内容。我猜测在启动时rc.local运行的时候,脚本并没有被启动。

我确认rc.local确实在启动时被调用了,我在文件中加了'touch /rclocaltest'。结果如预期,目录被创建了。

我还用另一个简单的python脚本测试了rc.local,这个脚本会在根目录创建一个文件,并打印到/startuplogfile。从终端运行和重启后,它都能正常工作。

我的执行权限设置如下:

-rwxrwxrwx 1 root root    4598 2011-04-22 19:09 main.py

我完全不知道为什么会这样,我尝试了所有能想到的方法来解决这个问题。有没有人知道可能是什么原因,我真的没什么头绪了。

补充:我忘了提到,我只通过ssh登录到这台机器。我不确定这是否有影响,因为据我所知,rc.local是在登录之前执行的。

补充:我注意到这个帖子有点混乱,所以让我总结一下:

  • 我确认rc.local在启动时被调用
  • 如果手动调用rc.local,一切都按预期工作
  • 权限设置正确
  • 一个测试用的python脚本在启动时与rc.local一起正常工作
  • 我的实际python脚本只有在手动调用rc.local时才会运行,而不是在启动时

2 个回答

3

绝对不想让这个脚本被所有人都能写。你是想在开机时自动以管理员身份运行它,但因为它是所有人都能写的,任何人都可以修改这个脚本,让它做任何事情——这可是个巨大的安全隐患。

3

试着把错误信息和正常输出都重定向到/startuplogfile这个文件里,方法如下:

/usr/local/bin/python3.2 "/root/Advantage/main.py" >> /startuplogfile 2>&1

这样你就能看到如果发生了错误。

撰写回答