[Discuss] systemd race condition problems

Stephen Adler adler at stephenadler.com
Sat Aug 30 09:29:21 EDT 2014


On 08/30/2014 08:27 AM, Stephen Adler wrote:
> Hi All,
>
> I'm having trouble with httpd and my subversion repository setup. I'm 
> using mod_dav_svn apache module to access my repository through httpd. 
> So here's the rub. I have everything configured and when I go to 
> update a file, I get an error that a particular file is not readable. 
> (permission denied)
>
> [Sat Aug 30 08:05:27.432294 2014] [:error] [pid 2063] (20014)Internal 
> error: [client 71.163.254.54:49330] Can't open file 
> '/export/telacode/base/SVNRepositories/TelaCodeRepository/format': 
> Permission denied
>
>
> The odd bit is the file is world readable.
>
> [root at telacode ~]# ls -l 
> /export/telacode/base/SVNRepositories/TelaCodeRepository/format
> -r--r--r--. 1 softadmin telacoderepository 2 Feb 12  2007 
> /export/telacode/base/SVNRepositories/TelaCodeRepository/format
>
>
> The solution to my problem is to restart apache with the command 
> 'apachectl restart'. Then I can update my repository through the http 
> mod_dav_svn.
>
> The file system is located on a raid 5 array
>
> [root at telacode ~]# df /export
> Filesystem      1K-blocks      Used  Available Use% Mounted on
> /dev/md3       1892209456 129889412 1664627680   8% /export
>
> and I'm thinking that the process which mounts/activates the file 
> system is slower than the apache service startup process. (rhel 7 now 
> uses systemd instead of sysVinit).
>
> So, any ideas on how to delay apache startup so that it is guaranteed 
> to start after the /export file system is fully mounted and available 
> to the system?
>
> Thanks. Steve.
> _______________________________________________
> Discuss mailing list
> Discuss at blu.org
> http://lists.blu.org/mailman/listinfo/discuss
>

Answering my own question.... I learned about 'systemd-analyze plot'. 
 From this nice graphical display of the startup process, I realized 
that my ypbind.service was taking a bit of time. (I'm working on 
migrating to LDAP at some later point...) Since there are a lot of 
permission issues set through ypbind, I thought it best to delay staring 
up apache until after the ypbind service was working. Thus all it took 
was to add ypbind.service to /usr/lib/systemd/system/httpd.service file 
in the 'After' tag list.

-------- cat /usr/lib/systemd/system/httpd.service  ------

[Unit]
Description=The Apache HTTP Server
After=network.target remote-fs.target nss-lookup.target ypbind.service

[Service]
Type=notify
EnvironmentFile=/etc/sysconfig/httpd
ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND
ExecReload=/usr/sbin/httpd $OPTIONS -k graceful
ExecStop=/bin/kill -WINCH ${MAINPID}
# We want systemd to give httpd some time to finish gracefully, but 
still want
# it to kill httpd after TimeoutStopSec if something went wrong during the
# graceful stop. Normally, Systemd sends SIGTERM signal right after the
# ExecStop, which would kill httpd. We are sending useless SIGCONT here 
to give
# httpd time to finish.
KillSignal=SIGCONT
PrivateTmp=true

[Install]
WantedBy=multi-user.target

-----------------------------

and now after a fresh reboot, my subversion repository access through 
httpd seems to be working again.

Cheers. Steve.




More information about the Discuss mailing list