以下是我的rc.local文件的内容。当我运行sudo /etc/rc.local时它工作正常。当我启动和实例。我希望monit可以安装,但事实并非如此。我完全失去了。我通常使用rc.local,但这是相当混乱的。
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
apt-get -y install monit
/etc/init.d/monit stop
cd /home/ubuntu/workspace/rtbopsConfig/
git fetch
git checkout origin/master rtb_ec2_boot/ec2_boot.py
git checkout origin/master config/
cp /home/ubuntu/workspace/rtbopsConfig/config/monit/redis/monitrc /etc/monit/
/usr/bin/python /home/ubuntu/workspace/rtbopsConfig/rtb_ec2_boot/ec2_boot.py >> /home/ubuntu/workspace/ec2_boot.txt 2>&1
/etc/init.d/monit start
chkconfig monit on
exit 0
答案 0 :(得分:4)
您可能希望使用以下命令启动脚本:
apt-get update
因为你的apt缓存可能已经过时了“apt-get install”。
您也可以通过以下两行开始调试脚本:
#!/bin/bash -ex
exec > >(tee /var/log/rc.local.log|logger -t rc.local -s 2>/dev/console) 2>&1
这会将每个命令及其输出回显到/var/log/rc.local.log,这样您就可以找出失败的错误和错误。
确保文件可执行:
sudo chmod 755 /etc/rc.local
请注意,rc.local在每次启动时运行,而不仅仅是第一次启动。系统启动一段时间后,确保再次运行它是正常的。
这是我写的一篇文章,其中详细介绍了上面的“exec”命令:http://alestic.com/2010/12/ec2-user-data-output
答案 1 :(得分:0)
在我的情况下,我意外地在rc.local中使用了CRLF line endings。将它们转换为LF结尾后,我的rc.local终于被执行了。
错误
#!/bin/sh\r\n
#\r\n
# This script will be executed *after* all the other init scripts.\r\n
# You can put your own initialization stuff in here if you don't
# want to do the full Sys V style init stuff.\r\n
\r\n
touch /var/lock/subsys/local\r\n
正确
#!/bin/sh\n
...