记一次rc.local中python脚本无法运行的解决过程


可以直接跳到原因。一句话,简洁明了。

问题记录:

自己写了一个Python脚本,需要在服务器自启时运行。但是在把python解释器全路径和脚本全路径写进去之后,重启服务器,发现没有办法启动脚本。

解决过程:

1. 检查/etc/rc.local的权限

该文件必须具有执行权限。如果没有,执行:

[user@host ~]# chmod +x /etc/rc.local

执行完之后,重启,发现脚本还是无法运行

2. 看运行出错日志

据说在/etc/rc.local中这样写,可以把运行的记录写入日志中。(默认日志在 /var/log/message 中)
在这里插入图片描述
重启ing…,
去查看日志记录。
在这里插入图片描述
发现是KeyError: “HOME”.
在Python命令行中输入os.environ:

在这里插入图片描述
发现有’HOME’ 手动黑人问号???,这狗东xi…

3. 修改文件不重启啊(用户切换到root了,我再也不用频繁打码le…)

由于每次修改文件之后,要重启,手动…过于麻烦…, 寻找不重启服务器的命令
在csdn上查看众多文章(没用文章)之后,发现了一个令我眼前一亮的命令:

systemctl restart rc-local	# 重启rc-local
systemctl status rc-local	# 查看重启rc-local的状态

手动执行第一条之后,就没有然后了。ctrl+c,再执行第二条,记录就不贴了(因为看不到TAT!)
但是结果呢,还是不行。

4. 接着查看文章吧

。。。
。。。
。。。
有一篇提到了:在rc.local执行时,/etc/profile并没有执行。康康**/etc/profile**是什么内容呢?
在这里插入图片描述
environment进入视线。
猜测(此处无证明):在/etc/rc.local运行时,/etc/profile没有运行。可能会导致与env有关的东西出错。紧急联想。。。

5. 回到2中的记录,KeyError“HOME”。忽然有些明白了…

(明白了啥?)去查看在哪里使用了os.envxxxxxx,发现
在这里插入图片描述

修改它吧。怎么改?

https://www.jianshu.com/p/a6592aae075d
图片的文章链接:https://www.jianshu.com/p/a6592aae075d

修改成:
在这里插入图片描述

6. 再回到3去试

看状态:
在这里插入图片描述

再查看邮件:
在这里插入图片描述

也收到了邮件通知。

7. 问题搞定!

原因:

由于/etc/rc.local 先于/etc/profile执行,导致与python中os.envxxxxx相关的操作可能会失败。在使用os相关操作时,需要注意。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值