Hello,
I am an Ansible beginner. I am trying to start Python script in pm2 process manager on my computers.
I think I have narrowed the problem to Ansible not knowing proper home directory.
Become, become_user, changing environment path in config or playbook does not solve the problem.
whoami returns my remote user, with become it returns root, while "echo $HOME" gives me /home/my_pc_user instead /home/remote_user
Here is my playbook:---
- hosts: tv
become_user: tester
become: yes
environment:
HOME: /home/tester
tasks:
- name: Home debug
debug:
msg: "'{{ lookup('env', 'HOME') }}' is the HOME enviroment variable."
- name: User debug
debug:
msg: "'{{ lookup('env', 'USR') | default('nobody', True) }}' is the USER."
- name: Start wlan monitor in pm2
shell: /home/tester/.npm-global/bin/pm2 start /home/tester/ops-tests/bin/wireless_monitor.py --name wireless_monitor --interpreter=python3 -- -i 3 -p /home/tester/wireless.log
Which returns:data@pc:~/tester$ ansible-playbook pm2_wlan_monitor_start.yml -K
BECOME password:
PLAY [tv] **********************************************************************
TASK [Gathering Facts] *********************************************************
ok: [10.10.20.254]
TASK [Home debug] **************************************************************
ok: [10.10.20.254] => {
"msg": "'/home/data' is the HOME enviroment variable."
}
TASK [User debug] **************************************************************
ok: [10.10.20.254] => {
"msg": "'nobody' is the USER."
}
TASK [Start wlan monitor in pm2] ***********************************************
changed: [10.10.20.254]
PLAY RECAP *********************************************************************
10.10.20.254 : ok=4 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Pm2 monitor will start process only to stop it with errors. Here is the Pm2 log:
M2 | 2020-11-30T12:21:52: PM2 log: App [wireless_monitor:0] starting in -fork mode-
PM2 | 2020-11-30T12:21:52: PM2 log: App [wireless_monitor:0] online
PM2 | 2020-11-30T12:21:52: PM2 log: App [wireless_monitor:0] exited with code [1] via signal [SIGINT]
PM2 | 2020-11-30T12:21:52: PM2 log: Script /home/tester/ops-tests/bin/wireless_monitor.py had too many unstable restarts (16). Stopped. "errored"
/home/tester/.pm2/logs/wireless-monitor-out.log last 15 lines:
/home/tester/.pm2/logs/wireless-monitor-error.log last 15 lines:
0|wireless | File "/home/tester/ops-tests/bin/common.py", line 83, in check
0|wireless | return self.make_result(self.get_value())
0|wireless | File "/home/tester/ops-tests/bin/wireless_monitor.py", line 47, in get_signal_level
0|wireless | w_info = get_wireles_info(_customer="get_signal_level")
0|wireless | File "/home/tester/ops-tests/bin/common.py", line 61, in wrapper
0|wireless | return_value = func(*args, **kwargs)
0|wireless | File "/home/tester/ops-tests/bin/wireless_monitor.py", line 21, in get_wireles_info
0|wireless | output = sp.run(["iwconfig"], stdout=sp.PIPE, stderr=sp.PIPE, universal_newlines=True)
0|wireless | File "/usr/lib/python3.7/subprocess.py", line 472, in run
0|wireless | with Popen(*popenargs, **kwargs) as process:
0|wireless | File "/usr/lib/python3.7/subprocess.py", line 775, in __init__
0|wireless | restore_signals, start_new_session)
0|wireless | File "/usr/lib/python3.7/subprocess.py", line 1522, in _execute_child
0|wireless | raise child_exception_type(errno_num, err_msg, err_filename)
0|wireless | FileNotFoundError: [Errno 2] No such file or directory: 'iwconfig': 'iwconfig'
When I SSH into my remote PC and use the same shell command the script starts in pm2 with no problems. I do not have to use full path to start pm2 which turned out is required to start it via Ansible playbook or ad-hoc command. Currently the process exits without making "wireless.log" file.
Any help or information would be appreciated as I could not find the solution.
Best regards,
Greg