Проблем с разрешениями быть не должно. Вы можете писать и читать данные, вот и все, но программа должна решить, как работать с данными внутри файла. Похоже на R, а не на систему, проблема для меня.
В любом случае, выходные данные сервера и локального хоста различаются.Тот, что с сервера, выглядит так же, как от wget
. Проверьте download.file.method
, который должен быть установлен на internal
(согласно docs ) - только этот метод поддерживает добавление в файл.
Файловая система не дает вам время с часовым поясом, это любая команда, которую вы используете для отображения этого времени в удобном для человека формате, который может дать вам часовой пояс, если он решит отобразить время по местному времени (как указано в /etc/localtime
, $TZ
или другом).
Как правило, временные метки в Unix выражаются способом, который не имеет отношения к часовым поясам. Время эпохи unix — это количество секунд (секунды, выраженные как 86400-я часть дня, поэтому различаются по длине, но более полезны для календарных расчетов) с момента точного события в истории (1970-01-01 00:00:00 UTC, однозначное время).Часовые пояса появляются только при отображении даты в формате календаря для человека.
ps -o lstart= -p "$pid"
date -r /some/file
оба показывают местное время. date
может выводить смещение часового пояса или нет, в зависимости от локали. Если вам нужно время UTC, запустите их под TZ=UTC0
:
TZ=UTC0 ps -o lstart= -p "$pid"
TZ-UTC0 date -r /some/file # or use date -u
GNU date
может проанализировать дату, сообщенную ps
, так что вы можете преобразовать его в любой формат, например время эпохи unix:
(export TZ=UTC0
date -d "$(ps -o lstart -p "$pid") +%s
date -r /some/file +%s)
(выше использования времени UTC. Это также будет работать с любым местным временем в вашей среде, за исключением одного часа в году, когда вывод времени без указания TZ неоднозначен (в зонах, реализующих переход на летнее время)).
В любом случае время запуска процесса не обязательно должно совпадать (и никогда точно не совпадать) с временем, когда процесс выполнил текущую команду. Например:
$ TZ=UTC0 strace -qtt -e execve sh -c 'sleep 3; exec env ps -o lstart= -p "$$"'
10:27:24.877397 execve("/bin/sh", ["sh", "-c", "sleep 3; exec env ps -o lstart= "...], [/* 28 vars */]) = 0
10:27:27.882553 execve("/usr/bin/env", ["env", "ps", "-o", "lstart=", "-p", "9397"], [/* 28 vars */]) = 0
10:27:27.885272 execve("/bin/ps", ["ps", "-o", "lstart=", "-p", "9397"], [/* 28 vars */]) = 0
Fri May 5 10:27:24 2017
Этот процесс 9397 выполняет 4 команды за время своего существования: strace
(разветвлено там), sh
, env
, ps
. Время, сообщаемое ps
, соответствует времени его разветвления strace
, а не времени выполнения ps
.
Если вы хотите получить точность до долей секунды (до 1/$(getconf CLK_TCK)
) с помощью zsh
, вы можете сделать:
zmodload zsh/datetime
tick=$(getconf CLK_TCK)
(echo $((EPOCHREALTIME + (${${=$(</proc/self/stat)##*)}[20]}. -
${${=$(</proc/$pid/stat)##*)}[20]})/tick)))
То есть мы начинаем время $pid и вновь созданной подоболочки (это 20-е поля после последнего появления символа )
в /proc/pid/stat
, выраженное в CLK_TCK в современных версиях Linux), разделите разницу на CLK_TCK
и прибавьте к текущему времени.