1 Востаннє редагувалося frz (20.03.2024 01:15:04)

Тема: запуск vpn (IPsec) в crontab

Команда-one-liner для запуску вручну аби перевірити статус з'єднання vpn і перезапустити, якщо з'єднання ще не встановлено:

/usr/sbin/ipsec status | /bin/grep -q 'ESTABLISHED' || /usr/sbin/ipsec restart

(працює коректно)

Тепер те саме але в crontab, пробую різні варіанти:

# запуск щохвилини
* * * * * /usr/sbin/ipsec status | /bin/grep -q 'ESTABLISHED' || /usr/sbin/ipsec restart

# запуск при старті інстансу
@reboot /usr/sbin/ipsec restart

# запуск при старті інстансу з паузою одна хвилина
@reboot /bin/sleep 60 && /usr/sbin/ipsec status | /bin/grep -q 'ESTABLISHED' || /usr/sbin/ipsec restart

ніфіга не працює, поки не запущу вручну команду вказану на початку.
Well, That's Fascinating.

Як перевіряю що не працює:

/usr/sbin/ipsec status

[порожня відповідь]

Як повинно виглядати коли успішно:

/usr/sbin/ipsec status
Security Associations (1 up, 0 connecting):
       myvpn[1]: ESTABLISHED 15 seconds ago, 172.18.0.3[172.18.0.3]...REMOTE_IP_ADDRESS[REMOTE_IP_ADDRESS]
       myvpn{1}:  INSTALLED, TUNNEL, reqid 1, ESP in UDP SPIs: cd0b3ccc_i f8833716_o
       myvpn{1}:   172.18.0.0/16 === 192.168.238.0/24

(REMOTE_IP_ADDRESS це плейсхолдер)

Буду копати далі. Хто знає відгадку, пишіть.

Upd: користувач в якому запис crontab той самий, під яким я запускаю команду вручну.

2 Востаннє редагувалося frz (21.03.2024 02:06:49)

Re: запуск vpn (IPsec) в crontab

За мотивами "граємо в шахи стоячи в гамаку в ластах".

#python
import subprocess

ipsec_status = subprocess.run(['/usr/sbin/ipsec', 'status'], capture_output=True, text=True) 
if 'ESTABLISHED' not in ipsec_status.stdout: 
    subprocess.run(['/usr/sbin/ipsec', 'restart'])

# решта коду для доступу до ресурсу REST API після встановлення з'єднання впн
...

Upd: хитрий фікс аби це було можливо:
https://replace.org.ua/post/193736/#p193736