我正在尝试将一个简单的命令传递给流浪者机器。
vagrant ssh -c "mysql -u root -e'CREATE DATABASE testing';"
不会创建数据库。相反,我只是通过ssh“登录”到流浪汉机器。
当我跑
时会发生同样的事情vagrant ssh -c "touch test.txt"
我也尝试过:
--command
代替简写-c
有什么想法会发生什么?
修改
我将发布我的脚本,它将我的脚本与Homestead集成,因此无法真正调整流浪汉配置。
修改
由于我使用的是Homestead,因此用户和pw是不同的。应该是
vagrant ssh -c "mysql -u homestead -psecret -e'CREATE DATABASE testing;'"
不更改上面的代码,以避免与已提交的答案混淆。
但是,这并没有解决问题。如上所述,正在发生同样的事情。
答案 0 :(得分:8)
这有效
vagrant ssh -- -t 'touch test.txt'
标志-t为bash创建一个伪tty使用。 这是对这个问题的答案的变体。
Running remote commands after vagrant ssh
这里有更详细的解释。
答案 1 :(得分:0)
您可以尝试将该命令添加到引导程序文件中,然后使用
vagrant provision
示例Vargant文件
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure(2) do |config|
config.vm.box = "ubuntu/trusty64"
config.vm.network "forwarded_port", guest: 8080, host: 8080
config.vm.provision :shell, path: "bootstrap.sh"
config.vm.provider "virtualbox" do |v|
v.memory = 1024
end
config.vm.synced_folder "./", "/vagrant", id: "vagrant-root",
owner: "vagrant",
group: "www-data",
mount_options: ["dmode=777,fmode=777"]
end
示例bootstrap.sh,它使用您的命令创建一个postgres数据库。您必须确保安装了正确的mysql软件包。
#!/usr/bin/env bash
add-apt-repository ppa:ondrej/php5-5.6
apt-add-repository ppa:chris-lea/redis-server
apt-get update
apt-get install -y --force-yes python-software-properties
apt-get install -y --force-yes postgresql postgresql-contrib
apt-get install -y --force-yes redis-server
apt-get install -y --force-yes apache2
apt-get install -y --force-yes php5
apt-get install -y --force-yes php5-imagick
apt-get install -y --force-yes php5-redis
apt-get install -y --force-yes php5-mcrypt
apt-get install -y --force-yes phppgadmin
apt-get install -y --force-yes php5-gd
apt-get install -y --force-yes php5-intl
apt-get install -y --force-yes php5-sqlite
apt-get install -y --force-yes php5-curl
apt-get install -y --force-yes git
if ! [ -L /var/www ]; then
rm -rf /var/www
mkdir /var/www
ln -fs /vagrant /var/www/vagrant-referron-com
#
sed -i "s#DocumentRoot /var/www/html#DocumentRoot /var/www#g" /etc/apache2/sites-available/000-default.conf
fi
sed -i "s#AllowOverride None#AllowOverride All#g" /etc/apache2/sites-available/000-default.conf
sed -i "s#AllowOverride None#AllowOverride All#g" /etc/apache2/apache2.conf
# copy the phppgadmin configuration
cp -f /vagrant/development/postgres/phppgadmin /etc/apache2/conf.d/
cp -f /vagrant/development/postgres/phppgadmin.conf /etc/apache2/conf-enabled/
cp -f /vagrant/development/postgres/config.inc.php /etc/phppgadmin/
# create the postgres database and user
sudo -u postgres createdb sometestdatabase
sudo -u postgres psql -U postgres -d postgres -c "alter user postgres with password 'postgres';"
# calling mysql to create your testing database.
sudo mysql -u root -e 'CREATE DATABASE testing ;'
# enable server to listen to port 8080
cp -f /vagrant/development/ports.conf /etc/apache2/
# install the other apache modules
a2enmod rewrite
php5enmod mcrypt
apachectl restart
答案 2 :(得分:0)
vagrant ssh -c“mysql -u root -e'CREATE DATABASE testing;'”
参考:https://laracasts.com/discuss/channels/servers/cant-create-a-mysql-database-when-sshing-into-vagrant
答案 3 :(得分:0)
尝试直接使用ssh而不是vagrant:
ssh vagrant -c 'your command'
您可能还需要在~/.ssh/config
Host vagrant
HostName 127.0.0.1
User vagrant
Port 2222
IdentityFile ~/.vagrant.d/insecure_private_key
UserKnownHostsFile /dev/null
StrictHostKeyChecking no
PasswordAuthentication no
IdentitiesOnly yes
LogLevel FATAL
ForwardAgent yes