Странное явление увидел. Написал скрипт для резервного копирования конфигурационных файлов сетевого оборудования. При ручном запуске скрипта скрипт копирует всё туда, куда указано, но когда написал правило в cron от root, то скрипт стал копировать файлы прямо в /root, создавая уже там папку, хотя папка tftp в другом месте прописана. Папка называется именем даты срабатывания скрипта.
Правило в cron от root, так как есть необходимость после редактирования конфига перезапускать службу tftp:
0 0 * * 6 /home/tftp/backup
Конфиг tftp:
TFTP_USERNAME="tftp"
TFTP_ADDRESS="0.0.0.0:69"
TFTP_OPTIONS="--secure --create"
TFTP_DIRECTORY="/home/tftp/2019-09-07"
Что в домашнем каталоге root:
tftp@tftp:~$ sudo ls -l /root/
total 16
drwxrwxrwx 2 tftp tftp 4096 Aug 17 00:00 2019-08-17
drwxrwxrwx 2 tftp tftp 4096 Aug 24 00:00 2019-08-24
drwxrwxrwx 2 tftp tftp 4096 Aug 31 00:00 2019-08-31
drwxrwxrwx 2 tftp tftp 4096 Sep 7 00:00 2019-09-07
Обратите внимание: самый последний каталог 2019-09-07 совпадает с параметром TFTP_DIRECTORY="/home/tftp/2019-09-07". То есть метод редактирования конфига сработал правильно.
Что в каталоге пользователя после речного запуска скрипта:
tftp@tftp:~$ ls -l
total 8
drwxrwxrwx 2 tftp tftp 4096 Sep 1 08:27 2019-09-01
-rwxrwxrwx 1 tftp tftp 2983 Aug 26 03:22 backup
Два метода из скрипта, которые отвечают за конфиг tftp:
# Каталог по умолчанию для TFTP
folder = str(datetime.date.today())
param = '"/home/tftp/' + folder + '"'
# Редактирование конфигурационного файла TFTP-сервера с учётом изменения каталога по умолчанию. Каталог именуется по текущей дате
def edit():
str1 = 'TFTP_USERNAME="tftp"'
str2 = 'TFTP_ADDRESS="0.0.0.0:69"'
str3 = 'TFTP_OPTIONS="--secure --create"'
with open('/etc/default/tftpd-hpa') as cfg:
for line in cfg:
if line.startswith('TFTP_DIRECTORY'):
break
sett = line.split('=')[1].strip()
line = line.replace(sett,param)
with open('/etc/default/tftpd-hpa', 'w') as cfg:
cfg.write(str1)
cfg.write('\n' + str2)
cfg.write('\n' + str3)
cfg.write('\n' + line)
# Здесь создаётся папка, куда складываются конфиги, и перезапускается служба TFTP
def tftp_start():
os.system('cd /home/tftp/')
os.mkdir(folder)
os.system('chown tftp:tftp ' + folder)
os.system('chmod 777 ' + folder)
os.system('systemctl restart tftpd-hpa')
Почему tftp игнорирует путь в конфиге?