是的,做了无数遍还是不长记性,昨天又在这上面踩坑了;在ubuntu上写的启动脚本不执行,仅仅是可执行权限和用户权限的问题,又浪费了一上午;
在unbuntu启动时自动做一些工作,最佳实践是:
你想要执行一个服务
- 如果是比较老的ubuntu (version<=14.04LTS);
这个时候你需要利用ubuntu的upstart机制
简单说来,就是将一个这样的脚本:
1 2 3 | start on startup task exec /path/to/command |
---|
存为taskxxx.conf文件,放到/etc/init 目录下面(这将会在开机时用root用户权限启动);
或者存为 ~/.config/upstart(这将会在开机时用当前用户权限启动)
- 如果你是比较现代的ubuntu (version>=16.04LTS)
你需要利用 systemd 服务,这个我们之前写文章科普过:
https://happy123.me/blog/2016/08/22/how-to-write-standard-startup-script/
仅仅想执行一条简单的命令
1 | sudo nano /etc/rc.local |
---|
加入执行的命令,不要忘了最后加exit
1 2 | /opt/tmux.sh exit 0 |
---|
增加可执行权限
1 | sudo chmod x /etc/rc.local |
---|
注意:
- 要有可执行权限,这个最容易踩坑,ubuntu安装完毕 /etc/rc.local 是没有可执行权限的
- 注意执行命令的ENV变量,不确定的时候要在命令签名设定SHELL ENV Variable
- 如果是执行一个脚本,注意脚本命令调用的shell (bash or sh or zsh),以及ENV Variable
- 注意执行脚本、执行命令的用户
如果是修改一个环境变量
修改当前用户:
1 | nano ~/.bashrc |
---|
所有用户生效:
1 | nano ~/etc/profile |
---|
最后,附赠最简单粗暴的开机执行任务方式
就是在/etc/rc.local 里面启动一个tmux session,在里面执行想要运行的命令;简单粗暴有效
来个模板:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | #!/bin/bash # description "Start Tmux" # Sleep for 5 seconds. If you are starting more than one tmux session # "at the same time", then make sure they all sleep for different periods # or you can experience problems /bin/sleep 5 # Ensure the environment is available source ~/.bashrc # Create a new tmux session named newscrawler.. /usr/bin/tmux new-session -d -s bitcoin # ...and control the tmux session (initially ensure the environment # is available, then run commands) # /usr/bin/tmux send-keys -t bitcoincash:0 "source ~/.bashrc" C-m tmux new-window -n console -t bitcoin /bin/sleep 3 /usr/bin/tmux send-keys -t bitcoin:0 "cd /opt/bitcoin && ./startbitcoind.sh" C-m /bin/sleep 3 /usr/bin/tmux send-keys -t bitcoin:1 "cd /opt/bitcoin && ./checkwallet start" C-m |
---|