我正在尝试在多台服务器上运行一个简单的查询。我 100% 确定相关文件和目录存在。
我可以执行简单的命令,例如ls
,,,等等,并且我可以在远程主机本身上运行该命令。pwd
whoami
sqlite
剧本任务:
- name: Do a test SELECT statement
become: yes
become_user: root
command: sqlite3 /usr/local/share/sqlite/dbfile.sqlite3 "SELECT * FROM db WHERE hostname="{{ db_server_prompt }}""
register: query_result
- debug: var=query_result.stdout_lines
我收到的错误是"msg": "[Errno 2] No such file or directory: b'sqlite3'",
。
我的语法有问题吗?为什么No such file or directory
使用 sqlite3 命令时会告诉我有“ ”?我尝试了可执行文件的绝对路径 ( /usr/bin/sqlite3
),但还是出现同样的错误。
更新我试图用chdir
作为论据这个答案,但我得到了Unable to change directory before execution
。我还尝试了绝对路径sqlite
。/usr/bin/sqlite3
这些都不起作用。
答案1
你可以看看raw
ansible和shell
之间有什么区别command
?并尝试以下操作
- name: Do a test SELECT statement
become: yes
become_user: root
shell:
cmd: /usr/bin/sqlite3 /usr/local/share/sqlite/dbfile.sqlite3 "SELECT * FROM db WHERE hostname={{ db_server_prompt }}"
register: query_result
- name: Show query result
debug:
var: query_result.stdout_lines
答案2
我遇到了类似的问题,但是涉及 ifquery ifquery -l", "msg": "[Errno 2] No such file or directory
:。
问题是这ifquery
需要 root 权限,而我在运行我的剧本时并没有请求 root 权限。
要以 root 身份运行剧本,只需使用-b
带有 的选项ansible-playbook
,或添加become=True
到您的 ansible.cfg 中。