![无法使用 Ansible 命令模块执行 sqlite 语句 - [Errno 2] 没有这样的文件或目录:b'sqlite3'”](https://linux22.com/image/773149/%E6%97%A0%E6%B3%95%E4%BD%BF%E7%94%A8%20Ansible%20%E5%91%BD%E4%BB%A4%E6%A8%A1%E5%9D%97%E6%89%A7%E8%A1%8C%20sqlite%20%E8%AF%AD%E5%8F%A5%20-%20%5BErrno%202%5D%20%E6%B2%A1%E6%9C%89%E8%BF%99%E6%A0%B7%E7%9A%84%E6%96%87%E4%BB%B6%E6%88%96%E7%9B%AE%E5%BD%95%EF%BC%9Ab'sqlite3'%E2%80%9D.png)
我正在尝试在多台服务器上运行一个简单的查询。我 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 中。