我知道配置脚本,但我要问的是另一个脚本.我希望在每次重新启动来宾后都执行一个脚本.

我正在使用shell provisioner.

config.vm.provision :shell, path: "vagrant/bootstrap.sh"

我无法将命令放入每次重新启动后要运行的脚本中.

基本上,我希望我的一个应用程序在用户执行vagrant up次时启动.

我的客人是Ubuntu14.04 trusty,我找到了一个解决方案,就是在我的客人身上做以下事情-

sudo crontab -e
#add the following line 
@reboot sh /path/to/my_script_on_guest.sh

我可以try 在我的配置脚本中这样做,但是sudo crontab -e需要一个编辑器,我必须以交互方式添加行.由于crontab文件是不固定的,我不知道这样做是否可行

echo '@reboot sh /path/to/my_script_on_guest.sh' >> crontab_file

我猜这一定是特定于来宾操作系统的事情.

用 vagrant 能做到这一点吗?

编辑:从ssh provisioner更正为shell provisioner.

推荐答案

你可以用run: 'always'

config.vm.provision :shell, path: "vagrant/bootstrap.sh", run: 'always'

这将确保您的命令在每次启动VM时都会执行(vagrant up或vagrant reload)

如果只需要始终运行某些命令,可以拆分脚本

config.vm.provision :shell, path: "vagrant/bootstrap1.sh"
config.vm.provision :shell, path: "vagrant/bootstrap2.sh", run: 'always'
config.vm.provision :shell, path: "vagrant/bootstrap3.sh"

脚本将按顺序运行,当机器第一次被配置时,bootstrap1,然后2,然后3

再运行vagrant up次(或重新加载)时,只会运行bootstrap2

Linux相关问答推荐

Linux/gcc中的文件创建时间系统调用

进程Forking 后 pthread_key_create() 生成的密钥会发生什么?

什么是`quote`命令?

判断指定名称的画面是否存在

Docker 容器立即退出

如何在makefile中包含静态库

如何使用 Bash 读取文件中的倒数第二行?

Linux time 命令输出中 real、user 和 sys 的含义

Linux/Unix 手册页语法约定

如何获取 CPU 使用率

我如何从 Ubuntu 上的源代码自己构建 python?

如何显示正在运行的进程列表 Python?

ldconfig 错误:使用 Linux 加载程序时不是符号链接

Python日志(log)记录 - 判断日志(log)文件的位置?

linux perf:如何解释和查找热点

System.currentTimeMillis 是否总是返回一个值 >= 以前的调用?

Linux 上的最大文件/目录数?

如何查看线程在哪个 CPU 内核中运行?

如何用逗号而不是空格分割列表

编辑文件时保留 samba 共享的文件权限